Mar*_*sen 4 c# authentication azure azure-active-directory azure-ad-msal
我下载了下面的示例以从 MS Graph 获取访问令牌,并且运行良好。现在我更改了代码以从自定义 Web API 获取令牌。在 apps.dev.microsoft.com 上,我注册了一个客户端应用程序和一个 API。
private static async Task<AuthenticationResult> GetToken()
{
const string clientId = "185adc28-7e72-4f07-a052-651755513825";
var clientApp = new PublicClientApplication(clientId);
AuthenticationResult result = null;
string[] scopes = new string[] { "api://f69953b0-2d7f-4523-a8df-01f216b55200/Test" };
try
{
result = await clientApp.AcquireTokenAsync(scopes, "", UIBehavior.SelectAccount, string.Empty);
}
catch (Exception x)
{
if (x.Message == "User canceled authentication")
{
}
return null;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我通过对话框登录 AD 在调试器中得到以下异常:
错误:无效的客户端消息 =“AADSTS65005:应用程序“CoreWebAPIAzureADClient”请求资源上不存在的范围“offline_access”。联系应用程序供应商。\r\n跟踪 ID:56a4b5ad-8ca1-4c41-b961-c74d84911300 r\n关联 ID:a4350378-b802-4364-8464-c6fdf105cbf1\r...
帮助感谢尝试了几天...
对于仍然遇到此问题的任何人,请阅读以下内容:
https://www.andrew-best.com/posts/please-sir-can-i-have-some-auth/
在这个人反映了你所有的挫败感之后,你会感觉好多了,除了他解决了……
如果使用 adal.js,对于您的范围,您需要使用
const tokenRequest = {
scopes: ["https://management.azure.com/user_impersonation"]
};
Run Code Online (Sandbox Code Playgroud)
我花了一个星期使用
const tokenRequest = {
scopes: ["user_impersonation"]
};
Run Code Online (Sandbox Code Playgroud)
.. 因为这是图形 API 范围采用的格式
截至目前,V2 端点不支持除 Microsoft Graph 之外的 API 访问。请参阅此处V2 应用程序模型的限制。
独立 Web API
您可以使用 v2.0 端点构建受 OAuth 2.0 保护的 Web API。但是,该 Web API 只能从具有相同应用程序 ID 的应用程序接收令牌。您无法从具有不同应用程序 ID 的客户端访问 Web API。客户端将无法请求或获取对您的 Web API 的权限。
对于您尝试完成的特定场景,您需要使用 V1 应用程序模型(在https://portal.azure.com上注册应用程序)。
在不久的将来,V2 应用程序将能够调用 Microsoft Graph 之外的其他 API,因此您的场景将得到支持,但目前情况并非如此。您应该留意我们有关此更新的文档。
| 归档时间: |
|
| 查看次数: |
5129 次 |
| 最近记录: |