gpt4 book ai didi

c# - Azure AD B2C - IDX20803 : Unable to obtain configuration from: 'System.String' .(.Net 5 Web API + Angular )

转载 作者:行者123 更新时间:2023-12-02 23:06:01 26 4
gpt4 key购买 nike

我有一个 Angular 应用程序和一个 Web Api 应用程序 (.Net 5.0),并且我需要使用 Azure AD B2C 对用户进行身份验证。因此,当用户需要到达某个 protected 路线时,他将被重定向到 B2C 登录页面、经过身份验证并重定向回 Angular 应用程序。这个 Angular 部分可以工作,这里没有问题。

现在,当 Angular 应用程序向 protected Web API (.Net 5) 发出请求时,此 Web API 应该授权该请求。我之前在.Net Core 的早期版本中已经这样做过。但这是全新且 Shiny 的 Microsoft 身份网络。但它不起作用。

设置

B2C 的 appsettings.json

  "AzureAdB2C": {
"TenantId": "[Tenant Guid]",
"Instance": "https://[tenant name].b2clogin.com/",
"ClientId": "[web api client Id]",
"Domain": "[tenant name].onmicrosoft.com",
"SignInPolicyId": "B2C_1_signin"
},

startup.cs-ConfigureServices()

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
Configuration.Bind("AzureAdB2C", options);

options.TokenValidationParameters.NameClaimType = "name";
},
options => { Configuration.Bind("AzureAdB2C", options); });

// Creating policies that wraps the authorization requirements
services.AddAuthorization();

services.AddApplication();
services.AddInfrastructure(Configuration);

services.AddRouting(options => options.LowercaseUrls = true);
services.AddMemoryCache();

services.AddControllers().AddNewtonsoftJson();

startup.cs - 配置()

...
app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
// endpoints.MapRazorPages();
endpoints.MapControllers();
});

通过此设置,我得到的只是非常描述性错误:

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'System.String'.---> System.IO.IOException: IDX20807: Unable to retrieve document from: 'System.String'. HttpResponseMessage: 'System.Net.Http.HttpResponseMessage', HttpResponseMessage.Content: 'System.String'.at Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(String address, CancellationToken cancel)at Microsoft.IdentityModel.Protocols.OpenIdConnect.OpenIdConnectConfigurationRetriever.GetAsync(String address, IDocumentRetriever retriever, CancellationToken cancel)at Microsoft.IdentityModel.Protocols.ConfigurationManager1.GetConfigurationAsync(CancellationToken cancel) --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.ConfigurationManager1.GetConfigurationAsync(CancellationToken cancel)at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()at Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync()at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync()at Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme)at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context)at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

但后来我将这个“助手”糖配置更改为以下内容:

services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; })
.AddJwtBearer(jwtOptions =>
{
jwtOptions.Authority = $"{Configuration["AzureAdB2C:Instance"]}/{Configuration["AzureAdB2C:TenantId"]}/{Configuration["AzureAdB2C:SignInPolicyId"]}/v2.0/";
jwtOptions.Audience = Configuration["AzureAdB2C:ClientId"];
jwtOptions.Events = new JwtBearerEvents
{
OnAuthenticationFailed = AuthenticationFailed
};
});

而且它有效!

那么,是否有关于如何真正配置 MS Identity Web 的好文档?为什么异常中没有准确的描述来准确说明缺少什么?

更新

感谢您的回答,但是这个 Identity Web 实现确实很差。

此异常的原因是 SignUpSignInPolicyId 未定义或拼写错误! Microsoft 团队,您必须将其添加到您的异常(exception)中!

  1. 添加有意义的异常(exception)
  2. 如果我不想使用 SignUpSignIn 政策(我不需要任何陌生人去注册我的应用),为什么它没有记录和支持?
  3. 一定要使用可选的日志记录,这会告诉开发人员出了什么问题/缺少什么!
  4. 使用构建器模式来创建配置。然后应该更容易识别特定情况下缺少配置的哪一部分。

最佳答案

关于c# - Azure AD B2C - IDX20803 : Unable to obtain configuration from: 'System.String' .(.Net 5 Web API + Angular ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68152901/

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