gpt4 book ai didi

authentication - asp.Net core 2.2中的多种认证方式

转载 作者:行者123 更新时间:2023-12-04 02:52:49 24 4
gpt4 key购买 nike

有没有办法在 .net core 中使用 JWT 承载身份验证和自定义身份验证方法?我希望所有操作都默认为 JWT,但在少数情况下我想使用自定义身份验证 header 。

最佳答案

我终于知道怎么做了。此示例默认使用 JWT 身份验证,在极少数情况下使用自定义身份验证。请注意,根据我的阅读,Microsoft 似乎不鼓励编写您自己的身份验证。请自行承担使用风险。

首先,将此代码添加到 startup.cs ConfigureServices 方法以确保全局应用身份验证。

services.AddMvc(options => 
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})

然后,添加它以配置您希望使用的方案(在我们的例子中是 JWT 和自定义)。

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
// Jwt Authentication
.AddJwtBearer(options =>
{
options.Audience = ".......";
options.Authority = "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_...";
})
// Custom auth
.AddScheme<CustomAuthOptions,
CustomAuthHandler>(CustomAuthOptions.DefaultScheme, options => { });

接下来创建一个类来保存您的自定义身份验证选项:

public class CustomAuthOptions : AuthenticationSchemeOptions
{
public const string Scheme = "custom auth";
public const string CustomAuthType = "custom auth type";
}

最后,添加一个身份验证处理程序来实现自定义身份验证逻辑。

public class CustomAuthHandler : AuthenticationHandler<CustomAuthOptions>
{
public CustomAuthHandler(
IOptionsMonitor<CustomAuthOptions> options,
ILoggerFactory logger,
UrlEncoder encoder,
ISystemClock clock) : base(options, logger, encoder, clock)
{
}

protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
// Auth logic goes here
if (!Request.Headers....)
{
return Task.FromResult(AuthenticateResult.Fail("Authentication Failed."));
}

// Create authenticated user
ClaimsPrincipal principal = .... ;

List<ClaimsIdentity> identities =
new List<ClaimsIdentity> {
new ClaimsIdentity(CustomAuthOptions.CustomAuthType)};

AuthenticationTicket ticket =
new AuthenticationTicket(
new ClaimsPrincipal(identities), CustomAuthOptions.Scheme);

return Task.FromResult(AuthenticateResult.Success(ticket));
}
}

最后,为了将它们结合在一起,向您希望对其使用自定义授权的操作添加授权属性。

[HttpGet]
[Authorize(AuthenticationSchemes = CustomAuthOptions.Scheme)]
public HttpResponseMessage Get()
{
....
}

现在 JWT 身份验证将自动应用于所有操作,自定义身份验证将仅添加到 Authorize 属性设置为自定义方案的操作。

我希望这对某人有帮助。

关于authentication - asp.Net core 2.2中的多种认证方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54260837/

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