ベースの認証クレームを使用してSharePoint 2010のと同じADに対して認証するときに、Windows認証とフォーム認証ユーザーを区別

StackOverflow https://stackoverflow.com/questions/2255836

質問

私は現在、環境はクレームベース認証を使用してSharePoint WebアプリケーションとのセットアップでSharePoint 2010のプロジェクトに取り組んでいます。ウェブアプリは認証のためにWindows認証を使用して、ポート8081上で作成し、フォームベース認証を使用して、ポート80に拡張されます。

フォーム認証プロバイダは、セットアップがエントリは中央管理とセキュリティトークンサービスのweb.configファイルである(アプリケーションのweb.configファイルに次のエントリを使用して、Windowsの認証ベースのサイトと同じActive Directoryを使用するだけでなくファイルであります):

    <membership defaultProvider="i">
  <providers>
    <add name="i" type="Microsoft.SharePoint.Administration.Claims.SPClaimsAuthMembershipProvider, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" />
    <add name="FBA_AD_MP" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ADFBAConnectionString" enableSearchMethods="true" attributeMapUsername="userPrincipalName" />
  </providers>
</membership>
予想通り

この設定を使用することで動作します。ポート8081上のアプリケーションを訪問するユーザーは、ポート80上のものは、カスタムログインフォームに向けられている、標準のWindows認証挑戦を提示しています。ボックス管理ツールのうち経由でサイトにユーザーを追加する場合は、そのようjohn.smith@mydomain.comなど特定のユーザーの検索が2安打、窓の認証プロバイダーから1、フォーム認証プロバイダーから1を返します。サイトにこれらのユーザーの両方を追加すると、SharePointが先頭に付加した識別子を持つアカウント名を保存することが明らかになりました。 Windowsの認証ユーザーは、Iに変換されます:0#.Wは| MYDOMAIN \ johnsmith、FBAのユーザーがIに変換されます。0#.F | fba_ad_mp | john.smith@mydomain.com

問題がでてくるのはここだ私たちは、入力のスプレッドシートを解析し、カスタム構築されたツールを使用して一括でサイトコレクションを作成している、サイトコレクションを作成し、以下の方法を使用して、新しく作成したサイトへの適切なユーザーを追加します。

    private static void AddUser(SPSite site, String userName, String spGroupName)
    {
        try
        {
            SPUser spUser = site.RootWeb.EnsureUser(userName);

            if (spUser != null)
            {
                site.RootWeb.Groups[spGroupName].AddUser(spUser);
            }
        }
        catch(Exception ex)
        {
            SharePointManager.Counter.Warnings++;
            SharePointManager.Logger.Warn(String.Format("\t\tUnable to add user {0} to group {1} at site {2}: {3}", userName, spGroupName, site.RootWeb.Url, ex.ToString()));
        }
    }

に渡されたのuserNameのPARAMTERは、例えば以下である、john.smith@mydomain.com。しかし、サイトに追加したユーザーには、私は、常にWindowsの認証ベースのユーザーです。0#.W | MYDOMAIN \ johnsmith

どのように私は、私は正しいユーザーがサイトに追加されることを保証することができますEnsureUserを呼び出すときにポーリングする認証プロバイダを指定できますか?

役に立ちましたか?

解決

問題は、両方のメンバシッププロバイダはメールアドレスを認識することであり、第1の結果(AD)を使用します。 FBA_AD_MPをお試しください:john.smith@mydomain.com - その構文は(チェック名ではなく、検索ダイアログを使用して)標準のユーザー名のコントロールで動作し、私はEnsureUserは同じように動作信じている。

他のヒント

一言で言えば、あなたはSPClaimProviderManagerを使用してSPClaimにSPUserに変換する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top