使用appId / appSecret(adal4j)获取令牌时,如何在AZURE AD中检查用户凭据?

时间:2018-06-20 04:13:10

标签: java azure-active-directory adal4j

我已经在Azure AD中创建了webapp(非本机)。我有Java代码(adal4j) 使用appId / appSecret凭据获取令牌:

    String clientId = "xxxxxxxxxxxxxxxxxxxxxx";
    String clientSecret = "yyyyyyyyyyyyyyyyyyyyyy";

    String resourceUrl = "https://graph.windows.net";
    String authorityUrl = "https://login.microsoftonline.com/zzzzzzzzzzzzzzzz/oauth2/authorize";
    ExecutorService executorService = Executors.newFixedThreadPool(4);

    Optional<UserInfo> userInfo = Optional.empty();

    try {

        AuthenticationContext authContext = new AuthenticationContext(authorityUrl, false, executorService);

        Future<AuthenticationResult> future = authContext.acquireToken(resourceUrl, new ClientCredential(clientId, clientSecret), null);
        AuthenticationResult result = future.get();
    }

现在,我想检查指定的用户/密码组合是否在Azure AD中,如果是,则获取此用户的名字和姓氏。 可以用usinq获得令牌吗?如何使用adal4j编写此类代码?

1 个答案:

答案 0 :(得分:0)

听起来您实际上要尝试的是登录用户并获得其姓氏/名字。如评论所述,建议的模式不是有效模式,将代表安全问题。此外, clientId clientSecret 的使用并不完全用于用户凭据,而是用于应用程序凭据。这用于没有服务/ api应用程序用户交互的流,听起来并不理想。

现在,要实现此目的,您将使用OpenID Connect protocol。为了简化操作,您的应用程序(在用户尝试登录时)将重定向到Microsoft登录页面(https://login.microsoftonline.com),输入其凭据并满足所有其他授权要求,同意您的应用程序,然后重定向背部。当他们回来时,您的应用程序将收到一个ID Token,可以对其进行验证并用于获取有关刚刚登录的用户的信息。在此期间,Azure AD / Microsoft还将在浏览器上设置一个cookie,以便用户将在其帐户中获得SSO。

关于如何实现这一点,我建议遵循ADAL4J Code Sample。这将使您的应用获得一个ID Token,以及一个可用于调用Microsoft Graph API的访问/刷新令牌。此API还可以获取有关用户的信息(基本配置文件信息),以及有关其Office365,Intune和Windows数据的信息。