SharePoint 2010 でカスタム クレーム プロバイダーを使用している場合、ユーザー選択ウィンドウでの選択後に名前が消える

原文の記事の投稿日: 2011 年 6 月 28 日 (火曜日)

最近、原因を突き止めるのが非常に困難な問題に遭遇したため、その問題と解決策を共有しようと考えました。このケースでは、カスタム クレーム プロバイダーが開発されており、それが SPTrustedIdentityTokenIssuer の既定のクレーム プロバイダーとして使用されていました (http://blogs.technet.com/b/speschka/archive/2010/04/28/how-to-override-the-default-name-resolution-and-claims-provider-in-sharepoint-2010.aspx (英語) を参照してください)。これは、動作するように見える場合もあります。検索を行うと一致するものの一覧が表示され、目的のものを選択して [OK] ボタンをクリックできます。場合によっては、すべてが正しく動作します。ダイアログが閉じ、解決された名前が入力コントロールに表示されます。また、FillResolve メソッドにブレークポイントを設定して、ステップ単位に実行することもできます。

しかし、場合によっては、次のような状態が発生します。

  • ユーザー選択ウィンドウが閉じる
  • 入力コントロールが空白で、何も (解決された名前など) 表示されない
  • FillResolve にブレークポイントを設定しても、ヒットしない
  • ULS ログを見ても、エラーが記録されていない

このケースで最終的にわかったのは、SPTrustedIdentityTokenIssuer 内に対応するマッピングがないクレームの種類を、カスタム クレーム プロバイダーが追加していたということでした。たとえば、クレームの種類が http://schemas.steve.com/foo であるクレームを作成していましたが、SPTrustedIdentityTokenIssuer のクレーム マッピングの一覧に、http://schemas.steve.com/foo のマッピングはありませんでした (クレーム マッピングの例とその作成方法については、http://blogs.technet.com/b/speschka/archive/2010/02/17/creating-both-an-identity-and-role-claim-for-a-sharepoint-2010-claims-auth-application.aspx (英語) を参照してください)。SharePoint が認識するクレームではなくマップされていないクレームを追加すると、パイプラインのどこかでそれを受け取ることはしますが画面は空白のままで、エラー メッセージも表示されません。そのため、原因を突き止めるのに長い時間がかかります。

この特定の問題に対処するために、結局、SPTrustedIdentityTokenIssuer をばらして作り直し、ユーザーの選択ウィンドウから消えていたクレームの種類の新しいマッピングを追加しました。コードを再び実行したところ、すべてが正しく動作したことにより、問題と解決策が確かめられました。

これはローカライズされたブログ投稿です。原文の記事は、「Name Disappears After Selecting in People Picker with Custom Claims Provider in SharePoint 2010」をご覧ください。