我迫切需要为SP2010网站创建自定义登录页面。现在,我知道这可以通过基于声明的身份验证和FBA来完成,但经过几天的工作后,我无法完成,因此我转而采取了不同的方法。Sharepoint 2010通过其他网站登录
也许我可以用.NET创建一个前台网站,这将欢迎用户和身份验证。然后,也许我可以为我的SP2010网站设置“会话状态”,然后将用户重定向到sp2010网站。我不知道这是否有可能,但我想学习。
我接受其他建议来为SP2010创建自定义登录页面。
在此先感谢。
我迫切需要为SP2010网站创建自定义登录页面。现在,我知道这可以通过基于声明的身份验证和FBA来完成,但经过几天的工作后,我无法完成,因此我转而采取了不同的方法。Sharepoint 2010通过其他网站登录
也许我可以用.NET创建一个前台网站,这将欢迎用户和身份验证。然后,也许我可以为我的SP2010网站设置“会话状态”,然后将用户重定向到sp2010网站。我不知道这是否有可能,但我想学习。
我接受其他建议来为SP2010创建自定义登录页面。
在此先感谢。
嗨我必须能够从SharePoint 2007中的移动设备验证用户,我想创建某种自定义登录。
有可能是这样做比这更容易/更好的方式,但我首先做了这样的SharePoint网站,然后我不得不检查活动目录。
(User对象是某种在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);
}
从长远来看,我想你会过得更好,询问的问题,将解决你的问题与CBA和FBA相比,可以在解决方案上共同使用自定义单一标志。