我在 Azure 辅助角色中托管了一个 Owin WebAPI 服务器。
Owin Authentication中间件似乎使用MachineKey来加密和生成Token。
当我只有一个该角色的实例时,这非常有效,但是一旦我想使用多个实例,每个实例生成的令牌就会不同。
这与 Web 场相同,Azure 会为 Web.config 中的所有实例使用相同的 .net 计算机密钥自动解决 WebRoles 的问题。
但这不适用于辅助角色实例。
有没有办法让 Azure 对工作角色的所有实例使用相同的机器密钥?
似乎比重写代码来为 Owin 生成令牌更容易。
如果您的自托管应用程序可以参考System.Web
,那么你可以使用相同的机器钥匙 https://msdn.microsoft.com/query/dev12.query?appId=Dev12IDEF1&l=EN-US&k=k(System.Web.Security.MachineKey);实施Microsoft.Owin.Host.SystemWeb
does.
Put the configuration/system.web/machineKey
App.config 中的设置就像 Web.config 中的设置一样。
参考参考System.Web
并添加以下类:
public class MachineKeyDataProtector : IDataProtector
{
private readonly string[] purposes;
public MachineKeyDataProtector(params string[] purposes)
{
this.purposes = purposes;
}
public byte[] Protect(byte[] userData)
{
return MachineKey.Protect(userData, this.purposes);
}
public byte[] Unprotect(byte[] protectedData)
{
return MachineKey.Unprotect(protectedData, this.purposes);
}
}
然后使用该类设置身份验证选项:
var authenticationOptions = new OAuthBearerAuthenticationOptions
{
AccessTokenFormat = new TicketDataFormat(new MachineKeyDataProtector(
typeof(OAuthBearerAuthenticationMiddleware).Namespace, "Access_Token", "v1")),
AccessTokenProvider = new AuthenticationTokenProvider(),
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)