Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用动态机器密钥生成身份验证令牌_Asp.net_Authentication_Asp.net Identity_Owin - Fatal编程技术网

Asp.net 使用动态机器密钥生成身份验证令牌

Asp.net 使用动态机器密钥生成身份验证令牌,asp.net,authentication,asp.net-identity,owin,Asp.net,Authentication,Asp.net Identity,Owin,使用动态机器密钥生成身份验证令牌 我正在使用OWIN安全上下文和CookieAuthenticationProvider生成身份验证cookie: public partial class Startup { public void ConfigureAuth(IAppBuilder app) { app.UseCookieAuthentication(new CookieAuthenticationOptions() { Authenticati

使用动态机器密钥生成身份验证令牌

我正在使用OWIN安全上下文和
CookieAuthenticationProvider
生成身份验证cookie:

public partial class Startup {
    public void ConfigureAuth(IAppBuilder app) {
        app.UseCookieAuthentication(new CookieAuthenticationOptions() {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Authentication/Login"),
            Provider = new CookieAuthenticationProvider()
        });
    }
}
但是,我希望在多租户环境中实现这一点。我已经建立了一个租户上下文,该上下文具有关联的机器密钥属性;我只需要一种基于租户特定的机器密钥(而不是
web.config
文件中的机器密钥)生成令牌的方法

理想情况下,我希望继承和扩充现有的OWIN类(可能是
CookieAuthenticationProvider
),而不是实现我自己的

有人知道如何从给定的机器/私钥生成身份验证令牌吗

账单


更新

由于机器钥匙无法编辑;实现
IDataProtectionProvider
或扩充
DataProtectionProvider
以使用
System.Security.Cryptography.DpapiDataProtector
并将租户特定的私钥作为
特定用途
参数传递,而不是尝试调整机器密钥,这样安全吗


如果所有租户共享机器密钥,但每个租户都有自己的私钥,那么他们将无法解密彼此的身份验证令牌,对吗?

我不建议在web场中使用DPAPI。它是为单个主机设计的。人们已经让它工作了,但它很脆弱

您可以用每个租户的密钥包装machinekey,encryptedKey。
KeyInfo可以让您确定租户。

也许不“准确”您需要什么,但可以引导您走向正确的方向:谢谢您的建议。不幸的是,每个租户将不会在其自己的应用程序池中运行,因此我必须继续查找。为什么每个租户都需要一个机器密钥?如果每个租户都有自己的机器密钥,他们可以使用它来解密其环境中的身份验证令牌,并获取对当前身份验证用户的引用。谢谢Brent。我不确定包装机器密钥是什么意思…我需要密钥不同,以便一个租户不能使用其机器密钥创建令牌来访问另一个租户的数据。我建议使用DpapiDataProtector,因为OWIN安全性的Katana实现就是这样使用的。你是说Katana在web服务器场中工作不好吗?机器密钥是对称密钥。包装它意味着创建一个EncryptedKey,其中用于包装它的密钥对于每个租户都是不同的。在这种情况下,您可以从KeyInfo属性检测租户。我认为Katana默认使用MachineKey;你说得对,它确实使用了机关枪,谢谢你的澄清。然而,我不知道如何包装机器钥匙将工作。租户需要能够解密身份验证令牌,才能在其ASP.NET环境中获取当前用户,my mutli租户服务需要能够使用租户的私有对称密钥解密同一令牌。如果我可以用给定的对称密钥模拟MachineKey解密,那将是理想的。您是否为外部消费者生成令牌?是的,我想,但这不是主要目标。无论令牌是如何生成的,我都需要我的多租户服务和租户服务能够从身份验证令牌中解密用户信息。