0

SP2010 サイトのカスタム ログイン ページを緊急に作成する必要があります。これは、クレーム ベース認証と FBA によって実行できることがわかりましたが、数日間の作業の後、実行できなかったため、別のアプローチを採用しました。

ユーザーを歓迎し、認証するフロント Web サイトを .NET で作成できるかもしれません。次に、SP2010 サイトの「セッション状態」を設定し、ユーザーを sp2010 サイトにリダイレクトできます。これが何らかの方法で可能かどうかはわかりませんが、学びたいです。

SP2010 用のカスタム ログイン ページを作成するための他の提案も受け付けています。

前もって感謝します。

4

2 に答える 2

1

長期的には、カスタムシングルサインオンの回避策を一緒にハックするよりも、CBAとFBAの問題を解決する質問をする方がよいと思います。

于 2011-01-31T15:20:35.217 に答える
0

こんにちは、SharePoint 2007 でモバイル デバイスからユーザーを認証できるようにする必要があり、ある種のカスタム ログインを作成したいと考えていました。

おそらく、これよりもはるかに簡単で優れた方法がありますが、最初に SharePoint サイトでこのようなことを行い、次に Active Directory をチェックする必要がありました。

(ユーザー オブジェクトは、WCF を介したある種の暗号化されたデータでしたが、基本的にはユーザー名とパスワードを提供していました)

    /// <summary>
    /// Authenticate whether the user is a user of SharePoint by their username and password
    /// </summary>
    /// <param name="LoggedIn">The user that is to be authenticated</param>
    /// <param name="SharePointSiteAddress">The address of the SharePoint site</param>
    /// <returns>The name of the user if they are authenticated or null if not</returns>
    public string AuthenticateSharePointUser_UsePassword(User LoggedIn, string SharePointSiteAddress)
    {
        string nameResult = null;

        try
        {

            Authentication authentication = new Authentication();

            //Check against active directory first
            bool isAuthenticated = authentication.AuthenticateUserActiveDirectory(LoggedIn.GetUserName(), LoggedIn.GetPassword());

            if (isAuthenticated)
            {
                nameResult = authentication.AuthenticateSharePointUserName(LoggedIn.GetUserName(), SharePointSiteAddress);
            }
        }
        catch (Exception ex)
        {
            throw new Exception("Authentication Error", ex);
        }

        return nameResult;
    }

    /// <summary>
    /// Authenticate that a user exists on SharePoint
    /// </summary>
    /// <param name="UserName">The username of the user to check</param>
    /// <param name="SiteAddress">The address of the site to check user on</param>
    /// <returns>The name of the user or null if not</returns>
    public string AuthenticateSharePointUserName(string UserName, string SiteAddress)
    {
        string user = null;

        //Open up the site and get the list 
        using (SPSite site = new SPSite(SiteAddress))
        {
            using (SPWeb web = site.OpenWeb())
            {
                try
                {
                    user = web.AllUsers[GetFullDomainUserName(UserName)].Name;
                }
                catch (Exception)
                {
                    //Swallow exception from the user not existing
                    user = null;
                }
            }
        }
        return user;
    }

    /// <summary>
    /// Authenticate the user against active directory 
    /// </summary>
    /// <param name="UserName">The username that can include the domain name domain\username or just username</param>
    /// <param name="Password">The password</param>
    /// <returns>Whether the user has been authenticated</returns>
    public bool AuthenticateUserActiveDirectory(string UserName, string Password)
    {
        //Split on the domain name e.g. domain\...
        string[] splitUserName = GetFullDomainUserName(UserName).Split('\\');
        PrincipalContext context = null;

        bool authenticated = false;

        //Provide user domain if there is one to validate against or use current domain thread is running on
        context = new PrincipalContext(ContextType.Domain, splitUserName[0]);

        //Now validate against active directory
        using (context)
        {
            authenticated = context.ValidateCredentials(splitUserName[1], Password);
        }

        return authenticated;
    }

    /// <summary>
    /// Get a full domain name inclusive username from username given
    /// if there is not already a domain name in it then attach current domain on this machine
    /// </summary>
    /// <param name="UserName">The username provided by user</param>
    /// <returns>User name in style e.g. domain\----</returns>
    public static string GetFullDomainUserName(string UserName)
    {
        //Split on the domain name e.g. net\356789
        string[] splitUserName = UserName.Split('\\');

        //If the user gave a domain name then use that domain else use the current domain
        if (splitUserName.Length <= 1)
        {
            splitUserName = new string[] { Environment.UserDomainName, UserName };
        }

        return string.Join("\\", splitUserName);
    }
于 2011-01-30T17:46:20.277 に答える