-1

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

    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 编写这样的代码?

4

1 回答 1

0

听起来您真正想做的是登录用户并获取他们的名字/姓氏。正如评论所说,建议的模式不是一个有效的模式,并且会代表一个安全问题。此外,clientIdclientSecret的使用并不完全用于用户凭据,而是用于应用程序凭据。这用于没有用户交互的服务/api 应用程序的流,听起来不像您想要的。

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

至于如何实现这一点,我建议遵循ADAL4J 代码示例。这将为您的应用程序获取一个ID Token,以及一个访问/刷新令牌,您可以使用它来调用Microsoft Graph API。此 API 还可以获取有关用户的信息(基本配置文件信息),以及他们的 Office365、Intune 和 Windows 数据。

于 2018-06-21T22:21:01.847 回答