如何解决OpenIdConnectAuthenticationHandler: message.State 为空或空,当连接到任何 OIDC 服务器时;尝试了其中的几个
我正在使用 ASP.NET Core 5.0 和 Microsoft.AspNetCore.Authentication 库来开发授权代码工作流的 OIDC 客户端实现。当我在浏览器中运行配置的重定向路径时,出现异常:
处理请求时发生未处理的异常。 异常:OpenIdConnectAuthenticationHandler:message.State 为 null 或为空。 未知位置
异常:处理远程登录时遇到错误。 Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler.HandleRequestAsync()
这是我的代码。你知道我哪里出错了吗?
public void ConfigureServices(IServiceCollection services)
{
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
services.AddControllersWithViews();
services.AddAuthentication(options =>
{
options.DefaultScheme = "cookie";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("cookie",options =>
{
options.Cookie.Name = "mvccode";
options.Cookie.SameSite = SameSiteMode.None;
})
.AddOpenIdConnect("oidc",options =>
{
options.Authority = "https://localhost:9443/oauth2/oidcdiscovery";
options.ClientId = Configuration.GetValue<string>("WSO2:id");
options.ClientSecret = Configuration.GetValue<string>("WSO2:secret");
options.ResponseType = "code";
options.UsePkce = true;
options.CallbackPath = "/cb";
options.Scope.Clear();
options.Scope.Add("openid");
options.GetClaimsFromUserInfoEndpoint = true;
options.SaveTokens = true;
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",RoleClaimType = "role"
};
});
services.AddAccessTokenManagement(options =>
{
options.Client.Scope = "api";
})
.ConfigureBackchannelHttpClient()
.AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(new[]
{
TimeSpan.FromSeconds(1),TimeSpan.FromSeconds(2),TimeSpan.FromSeconds(3)
}));
}
public void Configure(IApplicationBuilder app,IWebHostEnvironment env)
{
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/cb",async context =>
{
await context.ChallengeAsync();
var toSend = new AdRequest().GetRequest(Configuration);
ClaimsPrincipal principal = context.User;
if (null != principal)
{
foreach (Claim claim in principal.Claims)
{
await context.Response.WriteAsync("CLAIM TYPE: " + claim.Type + "; CLAIM VALUE: " + claim.Value + "</br>");
}
}
await context.Response.WriteAsync(toSend);
});
});
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。