c# - 使用 .NET 5 调用受 Azure B2C 保护的 Web API
问题描述
我正在尝试调用受 Azure B2C 保护的 Web API。我正在使用 .NET 5。我还使用 Azure B2C 来保护我的 WebApp。
在我的 WebAppstartup.cs
中,我有:
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(Configuration.GetSection("AzureAdB2C"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamWebApi("API", Configuration.GetSection("AzureB2API"))
.AddInMemoryTokenCaches();
我ITokenAcquisition
用来获取访问令牌。我试过IDownstreamWebApi
了,但是没有用。
string accessToken = await _tokenAcquisition.GetAccessTokenForUserAsync(Scopes);
我遇到的问题是,我收到的访问令牌的版本是版本 1。但是,Web API 需要版本 2。
我尝试在 Azure B2C WebAPI ( accessTokenAcceptedVersion
) 的清单中将版本更改为 1,但它不会接受更改。
任何建议将不胜感激。
Web API 的 startup.cs 是:
services.AddMicrosoftIdentityWebApiAuthentication(Configuration, "AzureAd");
解决方案
请检查以下是否可以解决。
AddInMemoryTokenCaches 添加一个内存令牌缓存提供程序,它将缓存为下游 Web API 获取的访问令牌。
services.AddMicrosoftIdentityWebAppAuthentication(Configuration, "AzureAdB2C") .EnableTokenAcquisitionToCallDownstreamApi(new string[] { Configuration["TodoList:TodoListScope"] }) .AddInMemoryTokenCaches(); services.AddInMemoryTokenCaches();
因此,您可以在更改接受的版本后清除缓存,这样应用程序就不会采用缓存和使用的先前版本,直到它过期。 参考1
正如您提到的 Web API 需要版本 2,我认为您可能必须在调用门户中的 Web api 的 Azure B2C WebAPP 的清单中将 accessTokenAcceptedVersion 更改为 2。
"accessTokenAcceptedVersion": 2,
笔记
- 如果 Supported account types 的值为 Accounts in any organization directory 和个人 Microsoft 帐户(例如 Skype、Xbox、Outlook.com),则接受的令牌版本必须是 v2.0。
- 否则,接受的令牌版本可以是 v1.0
- 如果值为 2,则 Web API 接受 v2.0 令牌。
- 如果值为 null,则 Web API 接受 v1.0 令牌。
其他要点:还要检查受保护的 Web API 应用程序注册的范围和权限
/ ASP.NET 核心模板当前使用 Azure AD v1.0,并计算 // 权限(作为 {Instance}/{TenantID})。我们要使用 Microsoft Identity Platform v2.0 端点
options.Authority = options.Authority + "/v2.0/";
也看到这个
推荐阅读
- javascript - 如果我在高度固定且溢出为自动的图表中有很长的数据,如何显示 x 轴线?
- google-bigquery - 是否可以为组织级别的不同项目分配 bigquery 插槽?
- reactjs - 在反应中将数据从父组件传递到提供者和消费者内部的子组件
- c# - HTTP 请求异常 Xamarin 表单
- ruby-on-rails - 我们可以为特定的会话设置会话超时吗
- firefox-addon - Mozilla 附加组件允许 Ace Editor 代码验证
- javascript - 使用 JavaScript 创建表
- javascript - 在一行Javascript中替换多个字符
- html - IONIC 3 - IOS 键盘重叠
切换到表情符号键盘时 - sharepoint - 创建 Bot Framework 查找字段