ASP.NET Core 自定义令牌提供程序在不同项目中使用

问题描述 投票:0回答:1

我通过继承

DataProtectorTokenProvider
然后注册它来实现自定义令牌提供程序。

我可以生成代币,但它们只能在同一个项目内验证。

我需要在

UserManager
在一个网站内运行时生成令牌,然后使用相同的
UserManager
代码但在不同的网站中运行来验证令牌。

两个网站都可以

builder.Services.AddDataProtection().SetApplicationName("Whatever");

我认为设置应用程序名称可以绕过“安全”废话,但显然不是。

当第二个网站尝试验证令牌时,它失败了

所提供的有效负载无法解密,因为它不受此保护提供程序的保护。有关更多信息,请访问 http://aka.ms/dataprotectionwarning

有什么想法让它发挥作用吗?

或者我是否需要解决方法,例如将令牌存储在

UserTokens
表中?

  "Logging": {
    "LogLevel": {

      "Microsoft.AspNetCore.DataProtection": "Trace"
    },

创建我看到的令牌时

Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector: Trace: Performing protect operation to key {7f8d00fb-e304-4476-9f01-1277b8936886} with purposes ('Whatever', 'RegistrationTokenProvider').

当尝试验证时我看到:

Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector: Trace: Performing unprotect operation to key {7f8d00fb-e304-4476-9f01-1277b8936886} with purposes ('Whatever', 'RegistrationTokenProvider').

GUID 是相同的,并且

Whatever
似乎是转移注意力,因为我的
RegistrationTokenProvider
在这两种情况下都存在。 那么这个蠢货到底是怎么回事呢?

asp.net-core-identity
1个回答
0
投票

如果您想在应用程序之间共享令牌,请确保它们访问相同的数据保护密钥 通过使用

'.PersistKeysToFileSystem()'
为密钥配置共享存储(示例 -> 公共文件系统路径)。 两个应用程序还必须使用“
.SetApplicationName("Whatever")'
”来调整数据保护上下文。 如果问题仍然存在,您可以考虑集中式身份验证解决方案,例如 OAuth2/OpenID Connect 或用于令牌验证的共享数据库, 尽管这些方法有其复杂性。关键配置差异,s 例如加密算法,应该进行检查以确保它们在应用程序之间匹配。

© www.soinside.com 2019 - 2024. All rights reserved.