2016-04-04 8 views
2

Azureテーブルストレージにユーザー情報を格納しているuser serviceを実装しています。私はパーティションキーの一部としてテナントIDの値を使用したいと思いますが、GetProfileDataAsyncとIsActiveAsyncで利用できるクレームは、5つのクレーム(sub、name、amr、idp、auth_time)で構成されています。カスタムユーザーサービスのGetProfileDataAsyncおよびIsActiveAsyncのコンテキストにクレームを追加するにはどうすればよいですか?

私のIDプロバイダからテナントIDが取得され、それは自分のアクセストークン&アイデンティティトークンにクレームとして含まれています。どのように私はそれらの方法で利用できるようにすることができますか?

答えて

4

AuthenticateLocalが呼び出されると、認証結果を示すAuthenticateResultが返されます。成功した場合は、subjectnameの値を受け入れるctorオーバーロードを使用します。オプションのclaimsコレクションもあります。 claimsの値を渡す場合、独自のカスタム要求をIdentityServerの認証Cookieに追加します。これらの申し立ては、GetProfile APIのSubjectの一部です(これらのAPIへのリクエストは、承認リクエストなどのブラウザ経由で行われているものとします)。これらの申し立てを検査し、必要な方法で使用することができます。

リクエストがブラウザ経由でない場合は、Subjectの唯一の申し立ては、ユーザーの一意のID(subのクレーム)です。

+0

これはいくつかのリクエストでは機能しますが、後でUserInfoエンドポイントを呼び出すためのものではありません。私はユーザーのSubjectにこの情報をエンコードしてしまい、テーブルストレージで効率的にクエリを実行するために同じパーティションに2つのレコードを作成しました。 – lgaud

+0

正解です。再読み込みした場合、それらのAPIへのリクエストが許可リクエスト "などからブラウザを介して行われていると仮定して書いていることがわかります。" –

関連する問題