【问题标题】:How to correctly renew ADAL authentication token for Server to server call如何正确更新服务器到服务器调用的 ADAL 身份验证令牌
【发布时间】:2016-03-26 06:54:21
【问题描述】:

在我的场景中,用户授予我的 AAD 应用程序使用 Microsoft Graph API 在服务器进程中不时读取其电子邮件的权限。在用户授予权限时,我正在使用 authContext.GetAuthorizationRequestURL 和 authContext.AcquireTokenByAuthorizationCodeAsync 获取令牌。此后,每当我需要访问令牌时,我都会执行以下操作:

    TokenCache tokenCache; // deserialized
    AuthenticationContext authContext = CreateAuthContext(authority, tokenCache);
    AuthenticationResult authResult = await authContext.AcquireTokenAsync(
            resource, 
            new ClientCredential(clientId, clientKey));
    return authResult.AccessToken;

不幸的是,使用生成的访问令牌调用 MS Graph API 会返回 403(禁止)。

我的印象是我没有用正确的信息调用 AcquireToken*() 的正确风格。有人熟悉这种情况吗?

【问题讨论】:

    标签: azure-active-directory adal microsoft-graph-api


    【解决方案1】:

    问题中指示的 AcquireTokenAsync 重载将获取仅限应用的令牌。需要接受 ClientCredential 和 UserIdentifier 参数的 AcquireToken 重载,但不幸的是,这样的重载不存在。

    但是,您可以继续使用访问令牌直到它过期(使用 AuthenticationResult.ExpiresOn 检查),然后使用 AuthenticationResult.RefreshToken 和 AcquireTokenByRefreshTokenAsync API 来获取新的访问令牌。

    【讨论】:

    • 酷,谢谢。我确实弄清楚了令牌的应用程序在线性。我最终通过创建和传递一个 UserAssertion 来让我的代码工作,该 UserAssertion 由以下部分组成:先前的访问令牌、用户名和神秘字符串:'"urn:ietf:params:oauth:grant-type:jwt-bearer"。它似乎工作。您能否评论该解决方案的有效性?
    • 这实际上对我根本不起作用。目前,我似乎有一个涉及使用 AcquireTokenUsingRefreshToken() 的解决方案。
    猜你喜欢
    • 2020-01-16
    • 1970-01-01
    • 2016-05-16
    • 2021-04-26
    • 2017-04-07
    • 2022-08-16
    • 2012-06-05
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多