2014-01-09 4 views
4

Azure 작업자 역할에 Owin WebAPI 서버를 호스팅했습니다.
Owin Authentication 미들웨어는 MachineKey를 사용하여 토큰을 암호화하고 생성하는 것으로 보입니다. 이 역할의 인스턴스가 하나뿐일 때 완벽하게 작동하지만 여러 인스턴스를 사용하자마자 각 인스턴스에서 생성 된 토큰이 다릅니다.Azure 작업자 역할에 대한 기계 키를 설정할 수 있습니까?

웹 팜과 동일한 문제인 Azure는 Web.config의 모든 인스턴스에 동일한 .net 컴퓨터 키를 사용하여 WebRoles에 대해이를 자동으로 해결합니다.

하지만 Worker Role 인스턴스에서는 작동하지 않습니다.

Azure가 작업자 역할의 모든 인시던트에 대해 동일한 시스템 키를 사용하는 트릭이 있습니까?

Owin의 토큰을 생성하기 위해 코드를 다시 작성하는 것보다 쉬울 것 같습니다.

+1

방법 단지 수동으로 응용 프로그램 구성 파일에서 시스템 키를 설정하는 방법에 대한? 전통적인 웹 역할과 잘 맞으며, 작업자 역할에도 문제가 없어야합니다. 반복합니다 - 구성에서 키를 수동으로 설정하고 자동 구성에 의존하지 마십시오! – astaykov

+0

답변 주셔서 감사합니다,하지만 App.config는 Web.config가 수행하는 것처럼 machine ket 설정을 지원하지 않습니다 ... –

+0

그리고 app.config 파일에'system.web \ machineKey' 섹션을 갖지 못하게하는 것은 무엇입니까? 대답하기 전에 해봤습니까? – astaykov

답변

3

자체 호스팅 응용 프로그램이 System.Web을 참조 할 수있는 경우 Microsoft.Owin.Host.SystemWeb과 동일한 MachineKey 구현을 사용할 수 있습니다.

Web.config에있는 것처럼 configuration/system.web/machineKey 설정을 App.config에 넣으십시오.

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); 
    } 
} 

그런 다음 그 클래스를 사용하여 인증 옵션을 설정합니다 :

참조 참조 System.Web하고 다음 클래스를 추가

 var authenticationOptions = new OAuthBearerAuthenticationOptions 
            { 
             AccessTokenFormat = new TicketDataFormat(new MachineKeyDataProtector(
              typeof(OAuthBearerAuthenticationMiddleware).Namespace, "Access_Token", "v1")), 
             AccessTokenProvider = new AuthenticationTokenProvider(), 
            }; 
관련 문제