私はapiコントローラ用にWebApiとトークンベースの認証を使用しています(認可:bearer xyzabc ..)。私は現在signalRハブを持っており、クライアント上にある同じトークンでクライアントを認証したいと考えています側。SignalR 2.0の認証ヘッダー
どうすればいいですか?このlinkは、どのようにトークンをURLパラメータで送信するのかを示していますが、私はそのトークンをどのように使用してサーバー側でユーザーを認証できるかわかりません。
私はapiコントローラ用にWebApiとトークンベースの認証を使用しています(認可:bearer xyzabc ..)。私は現在signalRハブを持っており、クライアント上にある同じトークンでクライアントを認証したいと考えています側。SignalR 2.0の認証ヘッダー
どうすればいいですか?このlinkは、どのようにトークンをURLパラメータで送信するのかを示していますが、私はそのトークンをどのように使用してサーバー側でユーザーを認証できるかわかりません。
毎回トークンを送信しません。私はOnConnected仮想メソッドでコンテキストユーザのプリンシパルを確立し、トークンから渡されたクエリ文字列から読み込みます。
私の場合。私は、ハブクラスから継承した抽象クラスを作成し、そこにoauth要求生成ロジックを埋め込んでいます。その後、私の標準的なコンクリートハブは、私の基本カスタムハブクラスから継承されました。
別のオプションとして、カスタムのauthorize属性または別のハブパイプラインモジュールのいずれかを使用できます。
私はこれらの戦術があなたのコードをDRYして拡張可能に保つかもしれないと思います。
私は、ヘッダーではなく、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..
}
私はJQueryのようなものからWeb APIからデフォルト/トークンハンドラを呼び出すと、ブラウザにも、SignalRであなたを認証するために使用されるクッキーが送信されることを発見しました。
SignalRハブ方式の[Context.User.Identity]と[Authorize]属性を使用して、有効な資格情報で/トークンを呼び出す限り、現在のユーザを取得できる必要があります。ブラウザに接続してください。