2013-12-18 2 views
7

내 api 컨트롤러에 WebApi 및 토큰 기반 인증을 사용하고 있습니다 (인증 : bearer xyzabc ..). 이제 signalR 허브가 있으며 클라이언트에있는 것과 동일한 토큰으로 클라이언트를 인증하고 싶습니다. 측면.SignalR 2.0의 인증 헤더

어떻게하면됩니까? 이 link URL 매개 변수를 통해 토큰을 보내는 방법을 보여줍니다,하지만 어떻게 그 토큰을 사용할 수 및 서버 쪽 사용자를 인증할지 잘 모르겠습니다.

답변

0

매번 토큰을 보내지 않습니다. OnConnected 가상 메서드에서 컨텍스트 사용자 원칙을 설정하고 토큰에서 전달 된 쿼리 문자열에서 읽습니다.

필자의 경우. 방금 Hub 클래스에서 상속받은 추상 클래스를 작성한 다음 oauth 클레임 생성 로직을 채웠습니다. 그런 다음 내 일반 콘크리트 허브가 기본 기본 맞춤 허브 클래스에서 상속되었습니다.

또 다른 옵션으로는 사용자 지정 권한 부여 특성이나 다른 허브 파이프 라인 모듈을 사용할 수 있습니다.

나는이 전술을 사용하면 코드가 건조하고 확장 가능할 수 있다고 생각합니다.

2

토큰을 헤더 대신 매개 변수로 전달하여이 문제를 해결했습니다. 하지만 헤더 (Context.Headers 또는 무언가에서 토큰을 추출하는 것)를 사용하여이 작업을 수행 할 수 있다고 상상해보십시오.

허브 방법에서 토큰을 얻은 후에이 코드를 사용하십시오.

public Task SendMessage(string message, string token) 
    { 
     var ticket = Startup.OAuthOptions.AccessTokenFormat.Unprotect(token); 
     bool isAuth = ticket.Identity.IsAuthenticated; 
     //You can retrieve other details like username and userid from ticket 
     ...rest of your code.. 
    } 
0

웹 API에서 JQuery와 같은 기본/Token 처리기를 호출 할 때 브라우저에 SignalR을 사용하여 사용자를 인증하는 데 사용되는 쿠키도 전송된다는 사실을 발견했습니다.

SignalR 허브 메소드의 [Context.User.Identity] 속성뿐만 아니라 [Context.User.Identity] 속성을 사용하여 유효한 사용자 인증 정보로/Token을 호출 한 경우 현재 사용자를 확보 할 수 있어야합니다. 브라우저에 연결 한 다음 허브에 연결하십시오.