如何让 mvc 管道在 .net core 5 中验证 oidc
How to get mvc pipeline to authenticate oidc in .net core 5
我正在尝试找出一种让 mvc 对 AzureAD oidc 令牌进行身份验证的方法。我的应用程序只是后端,没有登录或退出。所以我想从 OnAuthorizationAsync(**AuthorizationFilterContext** context)
获取用户声明,但它在 httpcontext 中总是 return 为空。我认为这可能是 AddOpenIdConnect
中的某种配置问题。以下是我在ConfigureServices
中的设置。需要做些什么才能获得更多的用户索赔?
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme
// options =>
//{
// options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
// options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; //AuthorizationConstants.AuthenticationSchemes.Oidc
//} //behave the same with or without this setting
)
.AddOpenIdConnect("oidc", options =>
{
options.ClientId = azureAdConfig.ClientId;
options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(azureAdConfig.EntryUrl, new OpenIdConnectConfigurationRetriever());
});
Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// routing and other things
app.UseAuthentication();
app.UseAuthorization();
}
你的东西根本不起作用。 OpenIDConnect 仅处理身份验证部分,但收到的令牌只是在您的设置中丢失。您遇到的第二个问题是您没有将 JwtBearer 与 AddOpenIdConnect 混合使用。 JwtBearer 用于从客户端接收访问令牌的 API。
您需要配置的适当框架是:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie(opt =>
{
}).AddOpenIdConnect(options =>
{
});
您应该将 OpenIDConnectHandler 与 Cookie 处理程序结合起来。然后就可以了
有关详细信息,请参阅本文:
How do I implement Blazor authentication with OpenID Connect?
我正在尝试找出一种让 mvc 对 AzureAD oidc 令牌进行身份验证的方法。我的应用程序只是后端,没有登录或退出。所以我想从 OnAuthorizationAsync(**AuthorizationFilterContext** context)
获取用户声明,但它在 httpcontext 中总是 return 为空。我认为这可能是 AddOpenIdConnect
中的某种配置问题。以下是我在ConfigureServices
中的设置。需要做些什么才能获得更多的用户索赔?
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme
// options =>
//{
// options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
// options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; //AuthorizationConstants.AuthenticationSchemes.Oidc
//} //behave the same with or without this setting
)
.AddOpenIdConnect("oidc", options =>
{
options.ClientId = azureAdConfig.ClientId;
options.ConfigurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(azureAdConfig.EntryUrl, new OpenIdConnectConfigurationRetriever());
});
Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// routing and other things
app.UseAuthentication();
app.UseAuthorization();
}
你的东西根本不起作用。 OpenIDConnect 仅处理身份验证部分,但收到的令牌只是在您的设置中丢失。您遇到的第二个问题是您没有将 JwtBearer 与 AddOpenIdConnect 混合使用。 JwtBearer 用于从客户端接收访问令牌的 API。
您需要配置的适当框架是:
services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
}).AddCookie(opt =>
{
}).AddOpenIdConnect(options =>
{
});
您应该将 OpenIDConnectHandler 与 Cookie 处理程序结合起来。然后就可以了
有关详细信息,请参阅本文: How do I implement Blazor authentication with OpenID Connect?