[英]Okta IDX20803: Unable to obtain configuration from: 'System.String' with .NET 5
[英]Azure AD B2C - IDX20803: Unable to obtain configuration from: 'System.String'. (.Net 5 Web API + angular)
我有一個 Angular 應用程序和一個 Web Api 應用程序 (.Net 5.0),我需要一個用戶通過 Azure AD B2C 進行身份驗證。 因此,當用戶需要到達某個受保護的路由時,他將被重定向到 B2C 登錄頁面,經過身份驗證並重定向回 angular 應用程序。 這個 Angular 部分有效,這里沒問題。
現在,當 Angular 應用程序向受保護的 Web API (.Net 5) 發出請求時,這個 web api 應該授權該請求。 我以前在.Net Core 的以前版本中做過這個。 但這是新的 shiny Microsoft Identity web。它不起作用。
"AzureAdB2C": {
"TenantId": "[Tenant Guid]",
"Instance": "https://[tenant name].b2clogin.com/",
"ClientId": "[web api client Id]",
"Domain": "[tenant name].onmicrosoft.com",
"SignInPolicyId": "B2C_1_signin"
},
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();
...
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
// endpoints.MapRazorPages();
endpoints.MapControllers();
});
有了這個設置,我得到的只是非常描述性的錯誤:
System.InvalidOperationException:IDX20803:無法從“System.String”獲取配置。 ---> System.IO.IOException:IDX20807:無法從“System.String”檢索文檔。 HttpResponseMessage:'System.Net.Http.HttpResponseMessage',HttpResponseMessage.Content:'System.String'。 在 Microsoft.IdentityModel.Protocols.HttpDocumentRetriever.GetDocumentAsync(字符串地址,
1.GetConfigurationAsync(CancellationToken cancel) --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.ConfigurationManager
取消)1.GetConfigurationAsync(CancellationToken cancel) --- End of inner exception stack trace --- at Microsoft.IdentityModel.Protocols.ConfigurationManager
1.GetConfigurationAsync(CancellationToken cancel) 在 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync() 在 Microsoft.AspNetCore。 Authentication.JwtBearer.JwtBearerHandler.HandleAuthenticateAsync() 在 Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.AuthenticateAsync() 在 Microsoft.AspNetCore.Authentication.AuthenticationService.AuthenticateAsync(HttpContext context, String scheme) 在 Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke (H T tpContext 上下文)在 Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext 上下文)在 Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext 上下文)
但是后來我將這個“助手”糖配置更改為以下內容:
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 團隊,您必須將其添加到您的異常中!
將 app settings.json 中的 SignInPolicyId 更改為 SignUpSignInPolicyId
結果
"AzureAdB2C": {
"Instance": "",
"Domain": "",
"TenantId": "",
"ClientId": "",
"Authority": "",
"CallbackPath": "/signin-oidc"
管理局不見了。 文檔確實很差!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.