gpt4 book ai didi

c# - ASP.NET Core 2.0 基于主机名的身份验证

转载 作者:太空宇宙 更新时间:2023-11-03 14:54:41 25 4
gpt4 key购买 nike

我会说带有身份验证的经典 ASP.NET Core 2.0 应用程序包括在 Startup.cs 文件的 ConfigureServices 方法中添加所需的身份验证服务:

services.AddAuthentication().AddFacebook(facebookOptions =>
{
facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
});

只要身份验证配置在调用 ConfigurationServices 方法期间已知并且对所有请求都相同,就可以了。

我们的案例需要不同的身份验证配置,比方说基于主机名:

company1.example.com // has own authentication configuration
company2.example.com // has own (probably different) authentication

有关更多详细信息,公司 1 仅配置了 Facebook,公司 2 仅配置了 Google 身份验证。

问题:是否可以对每个主机或每个请求进行不同的身份验证?例如,一旦我知道公司,我就可以加载和使用与此请求相关的身份验证配置。

最佳答案

有几种方法可以做到这一点。包括使用您的 IConfiguration 或访问 http 上下文作为您在 facebook 和 google 的方案事件中的服务。这是执行此操作的最干净的方法之一。您可以像这样制作自己的方案:

public class MyCustomAuth : AuthenticationHandler<AuthenticationSchemeOptions>
{

public const string SchemeName = "MyCustom";

public MyCustomAuth(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory
logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock)
{
}

protected override async Task HandleChallengeAsync(AuthenticationProperties properties)
{
if (Request.Host.Value == "")
{
await Context.ChallengeAsync(GoogleDefaults.AuthenticationScheme);
}
await Context.ChallengeAsync(FacebookDefaults.AuthenticationScheme);
}

protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
if (Request.Host.Value == "")
{
return await Context.AuthenticateAsync(GoogleDefaults.AuthenticationScheme);
}
return await Context.AuthenticateAsync(FacebookDefaults.AuthenticationScheme);
}
}

您可以将所有内容添加到您的启动中并像这样进行设置:

services.AddAuthentication(MyCustomAuth.SchemeName)
.AddCookie(...)
.AddFacebook(...)
.AddGoogle(...)
.AddScheme<AuthenticationSchemeOptions, MyCustomAuth>(MyCustomAuth.SchemeName, opts => { });

关于c# - ASP.NET Core 2.0 基于主机名的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50104753/

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