是否可以为Azure Worker角色设置machinekey

是否可以为Azure Worker角色设置machinekey,azure,azure-worker-roles,machinekey,Azure,Azure Worker Roles,Machinekey,我以Azure Worker角色托管了Owin WebAPI服务器。 Owin认证中间件似乎使用MachineKey加密和生成令牌。 当我只有这个角色的一个实例时,这非常有效,但是只要我想使用几个实例,每个实例生成的令牌都是不同的 这与web场的问题相同,Azure会自动为web角色解决这一问题,对web.config中的所有实例使用相同的.net计算机密钥 但这不适用于工作角色实例 让Azure对工作角色的所有属性使用相同的机器密钥有什么诀窍吗 似乎为Owin生成令牌要比重写代码容易。如果您的

我以Azure Worker角色托管了Owin WebAPI服务器。
Owin认证中间件似乎使用MachineKey加密和生成令牌。 当我只有这个角色的一个实例时,这非常有效,但是只要我想使用几个实例,每个实例生成的令牌都是不同的

这与web场的问题相同,Azure会自动为web角色解决这一问题,对web.config中的所有实例使用相同的.net计算机密钥

但这不适用于工作角色实例

让Azure对工作角色的所有属性使用相同的机器密钥有什么诀窍吗


似乎为Owin生成令牌要比重写代码容易。

如果您的自托管应用程序可以引用
System.Web
,那么您可以使用与
Microsoft.Owin.Host.SystemWeb
相同的实现

配置/system.web/machineKey
设置像在web.config中一样放在App.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(),
                                    };

在应用程序配置文件中手动设置机器密钥怎么样?它与传统的Web角色配合得很好,与工作者角色也不应该有问题。我重复-在配置中手动设置密钥,不要依赖自动配置!感谢您的回答,但是App.config不支持像Web.config那样设置machine ket…是什么阻止您在App.config文件中使用
system.Web\machineKey
节?回答之前你试过了吗?是的,在加载时被拒绝了。你把这个修好了吗?