Можно ли установить машинный ключ для рабочей роли Azure
Я разместил сервер Owin WebAPI в рабочей роли Azure.
Промежуточное программное обеспечение Autin Authentication использует MachineKey для шифрования и генерации токенов. Это прекрасно работает, когда у меня есть только один экземпляр этой роли, но как только я захочу использовать несколько экземпляров, токены, генерируемые каждым экземпляром, будут разными.
Это та же проблема, что и для веб-фермы. Azure автоматически решает эту проблему для веб-ролей, используя один и тот же ключ машины.net для всех экземпляров в Web.config.
Но это не работает для экземпляров Worker Role.
Есть ли хитрость в том, чтобы Azure использовал один и тот же ключ компьютера для всех экземпляров рабочей роли?
Кажется, было бы проще, чем переписывать код, чтобы генерировать токены для Овина.
1 ответ
Если ваше самостоятельное приложение может ссылаться System.Web
, то вы можете использовать ту же реализацию MachineKey, что и Microsoft.Owin.Host.SystemWeb
делает.
Положить 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(),
};