我使用第三方外部身份验证/单点登录服务器与Sitecore将故障单返回给Web服务器。
集成文档建议当您从服务器获得授权响应时,您可以创建自己的FormsAuthenticationTicket
,然后您可以访问在票证中输入的用户UserData
,如下所示:
FormsAuthenticationTicket ticket = ((FormsIdentity) HttpContext.Current.User.Identity).Ticket;
if (ticket != null)
{
string UserData = ticket.UserData;
...
}
我遇到的问题是User.Identity始终是extranet\Anonymous User
。
有没有办法阻止匿名用户被用作当前用户。或者我是否必须创建自己的会员提供商才能使其生效?
答案 0 :(得分:2)
您可以使用Sitecore.Security.Authentication.AuthenticationManager
构建虚拟用户并将该用户分配到Sitecore中的真实角色,从而避免创建自定义成员资格提供程序。这样,您可以限制对未经身份验证的用户的访问(通过拒绝对extranet\anonymous
用户帐户的读取访问权限并为您的自定义Extranet角色启用读取访问权限。代码(在验证用户名/密码之后)将是这样的:
using Sitecore.Security.Authentication;
var user = AuthenticationManager.BuildVirtualUser("someone", isAuthenticated: true);
user.RuntimeSettings.AddedRoles.Add("extranet\\some role");
AuthenticationManager.LoginVirtualUser(user);
答案 1 :(得分:1)
我使用WIF模块做了类似的事情。当我从系统收到回票时,我从故障单中提取了有关用户的数据。然后我为该帐户创建/更新了Sitecore用户(我本可以使用虚拟用户,但在这种情况下,我希望帐户是真正的Sitecore帐户)。
最后一步是明确调用Login以确保当前上下文用户是新创建的用户。