我正在开发一个移动应用程序,在这个应用程序中,我需要通过Azure验证用户的身份。基本上,用户将被提示他们的组织电子邮件和密码,移动电话应用程序发送到后端服务器将认证。
我有“azure-active目录库-for-java”的“公共客户端-应用-示例”,并且可以通过“Graph.windows.net”进行身份验证:
private static AuthenticationResult getAccessTokenFromUserCredentials(
String username, String password) throws Exception {
AuthenticationContext context = null;
AuthenticationResult result = null;
ExecutorService service = null;
try {
service = Executors.newFixedThreadPool(1);
context = new AuthenticationContext(AUTHORITY, false, service);
Future<AuthenticationResult> future = context.acquireToken(
"https://graph.windows.net", CLIENT_ID, username, password,
null);
result = future.get();
} finally {
service.shutdown();
}
if (result == null) {
throw new ServiceUnavailableException(
"authentication result was null");
}
return result;
}但是,这不返回任何userInfo (是null),而且我现在还不知道如何查询以获得用户所属的组的列表?
我只是使用从Adal4j获得的令牌使用API进行手动查找,还是在库中提供了一个函数?
我只是从Azure开始,所以很明显,我可能只是找错地方了。我试过'https://graph.windows.net/xxx.com/groups?api-version=1.5‘,但是get 'Resource 'https://graph.windows.net/xxx.com/groups?api-version=1.5’没有注册这个帐户。‘
发布于 2015-05-05 22:03:54
首先,您完全正确,adal4j没有返回UserInfo。这样做的原因是令牌请求不包括scope=openid参数,如果调用方想要响应中的id_token,则需要该参数。我打开了一个问题,它已经是已解决了。因此,更新后的adal4j将修复您的第一个问题“not”。
现在,关于当前用户的组成员身份:通常,我建议您只使用申请。通过更改应用程序清单(通过Azure门户下载并上载,在应用程序的配置页面下)可以很容易地做到这一点,包括:
"groupMembershipClaims": "All",不幸的是,adal4j还没有将组声明包含在getUserInfo()的结果中,所以这可能对您没有多大用处(问题打开了,这实际上取决于它的实现速度,或者您是否想自己实现)。
无论如何,因为可能有太多的组包含在令牌中(由您的应用程序指示,您的应用程序应该始终能够使用API来检索完整的组集用户是其成员)。
这就引出了最后一点:adal4j没有实现Azure的客户端。所以是的,您必须自己实现(或者使用/修改现有的OData客户端)。
(您可以阅读更多关于在这个Azure广告博客文章中的小组声明的内容。)
https://stackoverflow.com/questions/30004002
复制相似问题