none
ユーザがADグループに所属するか判定 RRS feed

  • 質問

  • こんにちは、いつもお世話になっています。

     

    次のような状況下で、ログインユーザが指定したADグループに属しているかをADに問い合わせずに判定できないものかと調べています。

    ・ログインユーザ:ADグループAに所属、SharePointサイト上にはアカウントなし

    ・ADグループA:SharePointサイト上にユーザ登録、SPGroup:Bに所属

     

    ユーザがグループBに所属しているかの判定はB.ContainsCurrentUserプロパティで簡単に判定できますが、

    グループAはSharePoint上ではSPUserとして扱われるので判定する方法がわかりません。

    ADに直接問い合わせれば判定はできるとは思いますが、この判定機能を頻繁に表示する画面でフィルタとして

    使いたいので、レスポンスの面でADの利用は難しいと考えています。

     

    何か良い方法はないでしょうか?

    よろしくお願いします。

    2010年10月15日 6:44

回答

  • 具体的な目的としては、サイドリンクバーの各ノード一つ一つに対するアクセス制御です。

    サイトコレクション内へのリンクについては、システム側でナビゲーションノードに対するセキュリティトリミングが自動で行われるかと思いますが、

     

    サイトリンクバーは、サイトコレクションの機能「発行インフラストラクチャ」を有効化すると、サイトのナビゲーションと名前が変わります。設定内容も大幅に変わり、メニューを表示する対象のユーザーを設定する事が出来ます。



    Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/
    • 回答としてマーク mohikan 2010年10月21日 9:41
    2010年10月19日 17:23
  • こんにちわ

    難易度はかなり高いですが、SPUser.UserToken のバイナリデータを解析することにより、実現が可能なのでは?と思い返信します。

    ※僕は、フォーム認証ばかりやっており、Windows認証の経験が乏しいので、ひょっとしたら間違っているかも知れません。その時は、ごめんなさい。

    SPUser.UserToken の解析は、MS社のサイトより「MS-WSSFO.pdf」のP56のExternal Group Tokenを参照することにより、バイナリデータの内容が分かります。

    SPUser.UserTokenは、ログイン時に、その人のグループ情報が格納されます。デフォルト24時間保存されます。この中にセキュリティグループのSIDが格納されていますので、そのSIDがSharePoint内部でマッピングできれば、ADに都度問合せにいかずに済むのでは?と思っています。

    マッピングを、たとえばADから1日1回、セキュリティグループの名称とSIDをデータベース等に取り込んでおけば、毎回ADに問合せせず、SharePointからデータベースへの問合せのみで可能と思っています。

    バイナリデータの解析は、結構厄介なので、難しいですが、やってやれなくはないと思います。

    では。

     

     

    • 回答としてマーク mohikan 2010年10月21日 9:41
    2010年10月20日 3:28

すべての返信

  • ADの情報ですので、ADに問い合わせなしで利用するのは無理だと思います。

    苦しい代替案として、ADの情報をどこかのリストに格納して、Webサービスで参照させることは可能ですが…

    しかし、そもそもADのコールがそれ程遅いでしょうか?

    もちろん環境次第ですが、SharePointは組織グループで設定されたアクセス権の判定に、その都度

    ADをコールしている筈ですので、その環境下ではSharePointがまともに動作しないのではないかと

    思うのですが…。


    SharePoint MANIACS あなたの SharePoint 活用できていますか?ちいさな「アドバイス」からご支援します。 http://sharepointmaniacs.com/
    2010年10月15日 8:17
  • ちょっと目的が判らないのですが、、目的が判らないと、良い方法も判らないので、、

    例えば、、セキュリティグループAに所属しているユーザーは、A部門に所属している、A部門の人を抽出する、、的な使い方ですか?

    であれば、対象ユーザーって使えそうな気がします。APIレベルで試したことないですが、、

     

     

    2010年10月16日 15:45
  • 回答ありがとうございます。

    説明不足のようですみません。

     

    具体的な目的としては、サイドリンクバーの各ノード一つ一つに対するアクセス制御です。

    サイトコレクション内へのリンクについては、システム側でナビゲーションノードに対するセキュリティトリミングが自動で行われるかと思いますが、

    コレクション外(インターネットサイトなど)のリンクに対しては機能しないので、自前でトリミングする必要があるかと思います。

    しかし、ノード一つ一つに対して毎度ADへ問い合わせるとなると、画面表示のレスポンスや、

    利用者数と、トリミングの際にADへの問合わせが必要なノード数によっては、ADサーバへの負荷も馬鹿にならないので、

    できればADに問い合わせずに済ませたかったというわけです。

     

    しかしやはりADに問い合わせる他ないのですね。

    というかMSDNで明記されていたのですね。調査不足でした。http://msdn.microsoft.com/ja-jp/library/ms457294(v=office.12).aspx

    そうすると、セッションにAD情報を持たせて問合わせ回数を減らすのが現実的でしょうか。

     

    2010年10月18日 4:18
  • 具体的な目的としては、サイドリンクバーの各ノード一つ一つに対するアクセス制御です。

    サイトコレクション内へのリンクについては、システム側でナビゲーションノードに対するセキュリティトリミングが自動で行われるかと思いますが、

     

    サイトリンクバーは、サイトコレクションの機能「発行インフラストラクチャ」を有効化すると、サイトのナビゲーションと名前が変わります。設定内容も大幅に変わり、メニューを表示する対象のユーザーを設定する事が出来ます。



    Blog:http://blog.sharepointissue.com HP:http://www.piecepoint.jp/
    • 回答としてマーク mohikan 2010年10月21日 9:41
    2010年10月19日 17:23
  • こんにちわ

    難易度はかなり高いですが、SPUser.UserToken のバイナリデータを解析することにより、実現が可能なのでは?と思い返信します。

    ※僕は、フォーム認証ばかりやっており、Windows認証の経験が乏しいので、ひょっとしたら間違っているかも知れません。その時は、ごめんなさい。

    SPUser.UserToken の解析は、MS社のサイトより「MS-WSSFO.pdf」のP56のExternal Group Tokenを参照することにより、バイナリデータの内容が分かります。

    SPUser.UserTokenは、ログイン時に、その人のグループ情報が格納されます。デフォルト24時間保存されます。この中にセキュリティグループのSIDが格納されていますので、そのSIDがSharePoint内部でマッピングできれば、ADに都度問合せにいかずに済むのでは?と思っています。

    マッピングを、たとえばADから1日1回、セキュリティグループの名称とSIDをデータベース等に取り込んでおけば、毎回ADに問合せせず、SharePointからデータベースへの問合せのみで可能と思っています。

    バイナリデータの解析は、結構厄介なので、難しいですが、やってやれなくはないと思います。

    では。

     

     

    • 回答としてマーク mohikan 2010年10月21日 9:41
    2010年10月20日 3:28
  • >>yama chan殿

    すみません、環境を載せていませんでした。

    WSS3.0なのでアドバイスいただいた方法は利用できそうにありません。

    2007以降はそういう機能があるんですね。残念です・・・

     

    >>tamaki9殿

    SPUser.UserTokenのバイナリフォーマット、きちんと定義されていたんですね。

    SPUser.UserTokenにそういった情報が詰まっているというのは、前回書込みの際のURLのページに説明があったので

    知っていたのですが、バイナリ形式で半ばあきらめていました。解析してみます。

     

    アドバイスありがとうございました。

    2010年10月21日 9:41