【问题标题】:AAD token using GraphAPI doesn't enable access to my own Rest API?使用 GraphAPI 的 AAD 令牌不能访问我自己的 Rest API?
【发布时间】:2018-02-25 15:13:51
【问题描述】:

我必须更改我的代码才能获得一个有效令牌,该令牌允许我使用 Graph API 访问 AAD 用户的详细个人资料信息

但令我沮丧的是,我最终意识到此令牌不允许访问我的 API,该 API 也托管在 AAD 后面的 Azure 上?

有没有一种方法可以两者兼得?

注意问题在于我在标头中传递的资源 - 它是用于我的 API 或用于 Graph,但我肯定不能要求用户登录两次?

解决方案是什么,除了在 Graph Token 用于登录时嵌入客户端密码 ..?

代码示例使用 Microsoft.IdentityModel.Clients.ActiveDirectory

示例 1 - 这将返回一个我可以用于我的 API 但不能用于 Graph 的令牌

authContext = new AuthenticationContext(authority);

PlatformParameters p = new PlatformParameters(PromptBehavior.Auto, hwnd);

AuthenticationResult result = null;

result = await authContext.AcquireTokenAsync(todoListResourceId, clientId, redirectURI, p);

Resource = https://[mywebsite].azurewebsites.net/api/Timekeeper

示例 2 - 这给了我一个可用于 GraphAPI 的令牌,但不是我的 AAD API

Resource = https://graph.windows.net/

【问题讨论】:

    标签: azure active-directory azure-active-directory adal


    【解决方案1】:

    您应该能够以静默方式获取其他 API 的访问令牌。

    用户不需要登录两次:)

    AAD 向您的应用返回一个刷新令牌,它实际上能够为您的应用有权访问的任何 API 获取访问令牌。

    ADAL 会自动为您执行此操作。

    您需要向 ADAL 指定您不希望提示第二个:

    var graphTokenResult = await authContext.AcquireTokenAsync("https://graph.windows.net", clientId, redirectURI, new PlatformParameters(PromptBehavior.Never));
    

    PromptBehavior.Never 告诉 ADAL 不要提示用户,使用缓存中的令牌

    如果您希望 ADAL 在无法使用其缓存获取令牌时显示登录屏幕,您也可以使用 PromptBehavior.Auto

    【讨论】:

    • 原谅我,这有点新意,所以我得到了初始令牌,我将它保存在缓存中,但是使用该令牌为我的 API 获取另一个令牌的调用应该是什么样的。 . ?
    • 您应该能够像以前一样进行第一次调用以获取 API 的令牌。在那之后添加这个就足够了。当我说缓存时,我的意思是 ADAL 自己的缓存 :) 它在内部将所有令牌缓存在内存中。因此,如果您稍后请求一个令牌并且它在其缓存中找到一个令牌,它不会进行任何调用。
    • 好的,让我澄清一下 - 我已经手动检索了该令牌并将其放入 Postman 并调用了我的 API,并收到了一个未经授权的页面。只有当我将 Graph 设置为 Resource 时才会发生这种情况。所以我不明白上面的内容是我已经在缓存中有一个令牌,就像你说的那样,我通常只会将它添加到标题中,但我不能,因为它会导致那个错误。那么我应该如何使用上面的令牌来获取我可以用于 API 的令牌...?
    • 对不起,我现在明白了 - 再次,非常感谢!
    • 吹毛求疵,对于PromptBehavior.Never,如果需要提示,则 AcquireToken 请求将失败并且永远不会回退到提示。由于大多数人将 Never 视为现实生活中的 Never.. 这是一个柔软的 Never.. 可能有一天会提示您提供凭据.. 所以你告诉我有机会 类型的交易。 .
    猜你喜欢
    • 2021-11-10
    • 1970-01-01
    • 2022-09-28
    • 2012-06-09
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多