2013-12-18 14 views
7

私はapiコントローラ用にWebApiとトークンベースの認証を使用しています(認可:bearer xyzabc ..)。私は現在signalRハブを持っており、クライアント上にある同じトークンでクライアントを認証したいと考えています側。SignalR 2.0の認証ヘッダー

どうすればいいですか?このlinkは、どのようにトークンをURLパラメータで送信するのかを示していますが、私はそのトークンをどのように使用してサーバー側でユーザーを認証できるかわかりません。

答えて

0

毎回トークンを送信しません。私はOnConnected仮想メソッドでコンテキストユーザのプリンシパルを確立し、トークンから渡されたクエリ文字列から読み込みます。

私の場合。私は、ハブクラスから継承した抽象クラスを作成し、そこにoauth要求生成ロジックを埋め込んでいます。その後、私の標準的なコンクリートハブは、私の基本カスタムハブクラスから継承されました。

別のオプションとして、カスタムのauthorize属性または別のハブパイプラインモジュールのいずれかを使用できます。

私はこれらの戦術があなたのコードをDRYして拡張可能に保つかもしれないと思います。

2

私は、ヘッダーではなく、Hubメソッドのパラメーターとしてトークンを渡すことでこれを解決しました。しかし、私はそれがヘッダーも(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

私はJQueryのようなものからWeb APIからデフォルト/トークンハンドラを呼び出すと、ブラウザにも、SignalRであなたを認証するために使用されるクッキーが送信されることを発見しました。

SignalRハブ方式の[Context.User.Identity]と[Authorize]属性を使用して、有効な資格情報で/トークンを呼び出す限り、現在のユーザを取得できる必要があります。ブラウザに接続してください。