gpt4 book ai didi

c# - 使用 OWIN 从 asp.net 核心发布的 oAuth 承载

转载 作者:行者123 更新时间:2023-12-03 18:21:17 28 4
gpt4 key购买 nike

我有带有 OWIN 管道的 ASP.NET 4.5 服务,它发出 OAuth access_token 以换取用户名/密码。该服务从 ng-app 调用,一旦它获得 token ,就会存储在浏览器的本地存储中。然后调用消耗这个token的资源API,API也是用asp.net 4.5写的,用的是owin。这是与 OWIN 一起发布的 OAuth token ,它已加密/签名为 machineKey secret - 到目前为止一切顺利,并且被资源 API 愉快地使用。所有这一切都是由 OAuthAuthorizationServerMiddleware 实现的。

现在我需要使用从同一个 ng-app 发送到 asp.net core 2.1 服务的这些 token ,没什么特别的,只需验证/解码它并在 token 中获取声明。
这个 OAuthAuthorizationServerMiddleware 从未移植到 asp.net 核心,所以我被卡住了。 ( OAuth Authorization Service in ASP.NET Core 无助于谈论成熟的 oidc 服务器,我只需要在不更改发行代码的情况下使用它们即可)
在 ConfigureServices() 附加到 service.AddAuthentication() 中:
Tried.AddJwtBearer - 但这没有意义 - 这些实际上不是 Jwt token
Tried.AddOAuth 但这也没有意义 b/c 我没有处理带有重定向的完整 OAuth 流以获得 token ,我也不处理 ClientId/ClientSecret/等,我只收到“Bearer token-here”在来自 ng 应用程序的 HTTP header 中,所以我需要在管道中进行一些解码并设置 ClaimsIdentity 但这个“管道中的东西”还需要访问与 asp.net 4.5 中相同的类似机械的数据欧文服务
有任何想法吗?

最佳答案

您可以将 OAuthValidation AccessTokenFormat 设置为使用 MachineKey DataProtectionProvider 和 DataProtector 来保护和取消保护您的不记名 token 。您将需要实现 MachineKey DataProtector。这家伙已经做到了https://github.com/daixinkai/AspNetCore.Owin/blob/master/src/DataProtection/src/AspNetCore.DataProtection.MachineKey/MachineKeyDataProtectionProvider.cs .

public void ConfigureServices(IServiceCollection services){
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
ConfigureAuth(services);

string machineKey = @"<?xml version=""1.0"" encoding=""utf-8"" ?>
<machineKey decryption=""Auto"" decryptionKey =""DEC_KEY"" validation=""HMACSHA256"" validationKey=""VAL_KEY"" />";
var machineKeyConfig = new XmlMachineKeyConfig(machineKey);
MachineKeyDataProtectionOptions machinekeyOptions = new MachineKeyDataProtectionOptions();
machinekeyOptions.MachineKey = new MachineKey(machineKeyConfig);
MachineKeyDataProtectionProvider machineKeyDataProtectionProvider = new MachineKeyDataProtectionProvider(machinekeyOptions);
MachineKeyDataProtector machineKeyDataProtector = new MachineKeyDataProtector(machinekeyOptions.MachineKey);

//purposes from owin middleware
IDataProtector dataProtector =
machineKeyDataProtector.CreateProtector("Microsoft.Owin.Security.OAuth",
"Access_Token", "v1");

services.AddAuthentication(options =>
{
options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddOAuthValidation(option=> {
option.AccessTokenFormat = new OwinTicketDataFormat(new OwinTicketSerializer(), dataProtector); })

保持 Owin 在 OAuthAuthorizationServerMiddleware 中使用的相同 DataProtector “目的”很重要,以便正确加密/解密数据。它们是“Microsoft.Owin.Security.OAuth”、“Access_Token”和“v1”。 (见 https://stackoverflow.com/a/29454816/2734166)。

最后,您将不得不迁移 Owin TicketSerializer(也可能是 TicketFormat),因为 NetCore 中的略有不同。你可以从这里获取它:

https://github.com/aspnet/AspNetKatana/blob/e2b18ec84ceab7ffa29d80d89429c9988ab40144/src/Microsoft.Owin.Security/DataHandler/Serializer/TicketSerializer.cs

我最近得到了这个工作。基本上是对 .NET 4.5 Owin API 进行身份验证,并使用相同的 token 在 NET Core 中运行资源 API。清理完我会尝试在github中共享代码。

据我所知,不建议保留旧的机器 key 数据保护器,而是从 NET Core 迁移到新的。有时这是不可能的。就我而言,我已经在生产中使用了太多 API,因此我正在尝试使用一些新的 NET Core API 来处理旧的 API。

关于c# - 使用 OWIN 从 asp.net 核心发布的 oAuth 承载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54661107/

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