gpt4 book ai didi

asp.net - 在 Asp Net Core 应用程序中使用现有的 Asp Net Framework 机器 key

转载 作者:行者123 更新时间:2023-12-04 08:54:00 25 4
gpt4 key购买 nike

我有几个使用 Net.Framework 构建的可用 ASP NET 应用程序共享相同 machineKey在 Web.config 中,因此当用户在一个应用程序中进行身份验证时,其他应用程序也会认为他已通过身份验证。

现在我必须将一个新应用程序连接到这个使用 asp net Core 2.0 的俱乐部。是否有关于如何转换现有“遗产”的快速解决方案

<system.web>
...
<machineKey decryption="AES" decryptionKey="blablabla" validation="SHA1" validationKey="blablabla" />
</system.web>

在核心应用程序中使用?

编辑:实际的 Net.Framework api 使用基于 token 的身份验证:
using Microsoft.Owin;
using Microsoft.Owin.Security.OAuth;
private void ConfigureOAuth(IAppBuilder app)
{
OAuthBearerOptions = new OAuthBearerAuthenticationOptions();
//Token consumption from header "Authentication Bearer"
app.UseOAuthBearerAuthentication(OAuthBearerOptions);
}

然后在 [Authorize]框架使用机器 key 对 token 进行解码。我猜正确的问题是如何在 Core 2.0+ 中使用手动提供的机器 key 来解密在 header 中发送的身份验证 token 。

最佳答案

您可以为此目的使用很棒的库 AspNetTicketBridge .

token 处理程序定义:

public class OwinBearerTokenMachineKeyAuthenticationHandler : AuthenticationHandler<AuthenticationSchemeOptions>
{
public const string DefaultAuthScheme = "DefaultAuth";

// List of supported decryption algorithms: DES | 3DES | AES
private const string DefaultDecryptionAlgorithm = "<YOUR DECRYPTION ALGORIGHM>";

// List of supported validation algorithms: SHA1 | MD5 | 3DES | AES | HMACSHA256 | HMACSHA384 | HMACSHA512
private const string DefaultValidationAlgorithm = "<YOUR VALIDATION ALGORITHM>";

private const string DefaultAuthorizationHeader = "Authorization";

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

protected override Task<AuthenticateResult> HandleAuthenticateAsync()
{
var token = Request.Headers[DefaultAuthorizationHeader][0].Remove(0, 7); // Bad code, don't use it... please

// Get keys from machine keys section / another configuration file.
var validationKey = "<YOUR VALIDATION KEY FROM MACHINE KEY CONFIG>";
var decryptionKey = "<YOUR DECRYPTION KEY FROM MACHINE KEY CONFIG>";


var ticket = MachineKeyTicketUnprotector.UnprotectOAuthToken(token, decryptionKey, validationKey, DefaultDecryptionAlgorithm, DefaultValidationAlgorithm);
var newTicket = AuthenticationTicketConverter.Convert(ticket, DefaultAuthScheme);
return Task.FromResult(AuthenticateResult.Success(newTicket));
}
}

应用配置:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// ...

app.UseAuthentication();
app.UseAuthorization(); // Gives ability to use [Authorize] attribute

// ...
}

public void ConfigureServices(IServiceCollection services)
{
// ...

RegisterAuthorization(services);

// ...
}

private void RegisterAuthorization(IServiceCollection services)
{
services.AddAuthentication(o => { o.DefaultScheme = OwinBearerTokenMachineKeyAuthenticationHandler.DefaultAuthScheme; })
.AddScheme<AuthenticationSchemeOptions, OwinBearerTokenMachineKeyAuthenticationHandler>(OwinBearerTokenMachineKeyAuthenticationHandler.DefaultAuthScheme, o => { });
services.AddAuthorization(); // Gives ability to use [Authorize] attribute
}

附言我花了 2 天的时间来找到完成这项任务的好的解决方案,但只有这似乎是最好的。

关于asp.net - 在 Asp Net Core 应用程序中使用现有的 Asp Net Framework 机器 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50578021/

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