【发布时间】:2021-10-30 05:30:44
【问题描述】:
我使用 .NET 5 创建了一个 WebAPI,使用 Azure AD 对用户进行身份验证。我正在使用 Postman 生成访问令牌,并且在将访问令牌作为承载传递时 WebAPI Works。
我想调用 Graph API 以使用访问令牌获取用户日历和个人资料,但无法这样做。我没有运气关注下面提到的几篇文章。
使用访问令牌调用 /me Graph API 时出现无效的身份验证令牌错误
应用注册以仅使用 My Org。我已经为 Graph API 添加了 Delegated 权限。
使用 Expose An API 创建了一个自定义范围,因为 WebAPI 抛出签名无效错误。
我的 WebAPI 在 StartUp.cs 代码中配置服务:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration);
我的 AppSettings.json
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "<Domain",
"ClientId": "<ClientId>",
"TenantId": "<TenantId>"
},
我曾尝试关注几篇建议代表流量的文章
https://joonasw.net/view/azure-ad-on-behalf-of-aspnet-core
Struggle with MS Graph and asp.net Core API
非常感谢任何帮助。
编辑1:
我尝试实施 Farid 建议的解决方案。 邮递员输出返回 HTML 响应以登录。它是一个 ASP.NET Core 5 WebAPI,所以我将 ConfigureServices 代码更改为如下:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
我收到以下错误。
System.InvalidOperationException: No authenticationScheme was specified, and there was no DefaultChallengeScheme found. The default schemes can be set using either AddAuthentication(string defaultScheme) or AddAuthentication(Action<AuthenticationOptions> configureOptions).
at Microsoft.AspNetCore.Authentication.AuthenticationService.ChallengeAsync(HttpContext context, String scheme, AuthenticationProperties properties)
at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
更新:
我能够使用以下代码解决错误:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi() .AddMicrosoftGraph(Configuration.GetSection("DownstreamApi"))
.AddInMemoryTokenCaches();
我可以阅读我的个人资料,但无法获取日历项目。这可能是由于管理员同意要求。
【问题讨论】:
-
请您尝试一下解决方案,让我知道它是否真的有效。
-
@MdFaridUddinKiron:非常感谢您提供帮助并提供解决方案。我正在尝试,如果有效,我会通知您。
-
我很高兴,让我更新,即使您需要进一步的帮助。
-
您好,请问还有什么需要我帮忙的吗?
-
@MdFaridUddinKiron 这是我正在构建的 .NET 5 WebAPI 并且 .AddMicrosoftIdentityWebApp 似乎不可用。需要安装任何特定的软件包吗?
标签: c# azure-active-directory asp.net-core-mvc microsoft-graph-api asp.net-core-webapi