フェデレーション認証:外部プロバイダーとのログインの失敗


解説

フェデレーション認証では、認証を続行するためにnameidentifierクレームが必要ですが、デフォルトでは、すべてのIDプロバイダーがこのクレーム(およびnameIDクレーム)を送信するわけではありません。クレームが欠落している場合、以下のエラーがブラウザー ウィンドウに表示されます:

Error: "Unsuccessful login with external provider"

解決策1

この問題を解決するには、フェデレーション認証構成ファイルに次の変換を適用してください:

<transformations hint="list:AddTransformation">
  <transformation name="Name Identifier Claim" type="Sitecore.Owin.Authentication.Services.DefaultTransformation, Sitecore.Owin.Authentication">
    <sources hint="raw:AddSource">
      <claim name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn" />
    </sources>
    <targets hint="raw:AddTarget">
      <claim name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" />
    </targets>
    <keepSource>false</keepSource>
  </transformation>
  ...

解決策2

この問題を解決するには、名前識別子(NameID)クレームを送信するようにID サーバーを構成してください。

以下は、Active Directory フェデレーション サービス(ADFS)の例を示したものです:

  1. サーバー マネージャー ダッシュボードを開きます。
  2. Tools (ツール)」、「AD FS Management (AD FS の管理)」の順にクリックします。
  3. Relying Party Trusts (証明書利用者信頼)」フォルダーをクリックします。
  4. 対応するエントリーを選択します。
  5. Edit Claim Issuance Policy (要求発行ポリシーの編集)」をクリックします。
  6. 関連するルールをダブルクリックします。
  7. User-Principal-Name属性とNameIDクレームのマッピングを追加します。
  8. 変更を適用します。