gpt4 book ai didi

azure - 使用 GraphAPI 的 AAD token 无法访问我自己的 Rest API?

转载 作者:行者123 更新时间:2023-12-03 01:44:24 25 4
gpt4 key购买 nike

我必须更改代码才能获得有效 token ,以便我可以使用 Graph API 访问 AAD 用户的详细个人资料信息

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

有没有一种方法可以同时支持这两种方法?

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

除了在使用图形 token 登录后嵌入客户端 key 之外,解决方案是什么?

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

示例 1 - 这会返回一个 token ,我可以将其用于 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 的 token ,但不能用于我的 AAD API

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

最佳答案

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

用户不需要登录两次:)

AAD 返回您的应用程序一个刷新 token ,它实际上能够为您的应用程序有权访问的任何 API 提供访问 token 。

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

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

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

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

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

关于azure - 使用 GraphAPI 的 AAD token 无法访问我自己的 Rest API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48975029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com