2

ADFSとSAML2.0を使用してシングルサインオン(SSO)システムをセットアップ中です。私は立ち往生しているシナリオに従う必要があります:

1)ユーザーがWebリソースにアクセスしようとしましたが、ログインしていないため、ADFSSSOサービスに転送されます。

2)ユーザーはADFSに対して正常に認証されます。

3)ADFSはSAML応答をWebリソースに返します。

4)Webリソース自体にユーザーデータベースがありますが、ユーザーはここに存在しません。

5)したがって、Webリソースはユーザーアカウントをサイレントに作成する必要があります。これを行うには、メールアドレスが必要です。

それで、成功したSAML応答メッセージでユーザーの電子メールアドレスを返すようにADFSを構成することは可能ですか?

4

1 に答える 1

3

ADFSに電子メールクレームを返すように構成できます。ただし、ADFSにこれを取得する方法(Active Directoryまたはその他の属性ストア、アクセスできるデータベースなど)があり、返されたトークンを復号化して読み取りを行うようにアプリケーションが設定されている場合に限ります。内部の主張。

これがADFS2.0であると仮定すると、次のようになります。

  1. WebリソースをRelyingPartyTrustとして設定します(これを行ったように聞こえます)
  2. RPを右クリックし、[クレームルールの編集... ]を選択します。
  3. [発行変換ルール]タブで、電子メールアドレスの新しいルールを追加します

ユーザーがドメインを介して認証しているためにActiveDirectoryから電子メールを取得できる場合は、[LDAP属性をクレームとして送信する]ルールテンプレートを選択できます。

それ以外の場合は、「カスタムルールを使用してクレームを送信」を選択し、カスタム属性ストアを(データベースまたはデータベースに)設定して、クレームルールを作成する動作を実行する必要があります。

セットアップが完了したら、ASP.NETアプリで、トークン発行者としてADFSを使用するように構成する必要があります。これは、Windows IdentityFrameworkMicrosoft.IdentityModel.dllおよび関連する構成を使用して実現されます。WIF SDKをインストールした場合は、Visual Studioにいくつかの追加オプションが必要です。つまり、Webプロジェクトを右クリックすると、[STS参照の追加]オプションが表示されます。これにより、web.configを適切に自動的に設定するウィザードであるFedUtilが実行されます。設定方法についてはGoogleをご覧ください。

サイトでクレームにADFSを使用しているので、いくつかの変更を加える必要があります。<microsoft.identityModel>web.configのセクションで、ブートストラップトークン( <service saveBootstrapTokens="true">)を保存するように設定されていることを確認します。コードで、次の手順を実行することで、必要なときにいつでもメールクレームにアクセスできるようになりました。

string email = (User.Identity as IClaimsIdentity).Claims.Where(c => c.ClaimType == ClaimTypes.Email).FirstOrDefault().Value;

ブートストラップトークンを保存するように設定しないと、Claimsコレクションは空になります。

ただし、途中で物事を台無しにする可能性のある他の多くの要因が潜在的にあります。うまくいけば、これはあなたを正しい軌道に乗せるでしょう。

于 2012-02-23T17:03:16.253 に答える