你怎么通过身份验证的届会之间应用领域
-
09-06-2019 - |
题
可以说,你有网站www.xyz.com 和www.abc.com.
可以说,一个用户去www.abc.com 和他们获得身份验证通过正常的ASP。网成员提供者。
然后,从该网站,他们得到发送给(重新定向的联系,无论工作)的网站www.xyz.com和意图的网站www.abc.com 是通过用户的其他网站的状况的isAuthenticated,因此,该网站www.xyz.com 不会问的全权证书所述的用户。
什么样的,将需要为此工作吗?我有一些限制在此,虽然,用户数据库是完全分离的,它不是内部一个组织,在所有方面,它就像是从stackoverflow.com 来作证的,它是独立的性质。一个链接到一个有关条款就足够了。
解决方案
尝试使用FormAuthentication通过设置网。config认证部分像这样:
<authentication mode="Forms">
<forms name=".ASPXAUTH" requireSSL="true"
protection="All"
enableCrossAppRedirects="true" />
</authentication>
产生一个机的关键。例如: 最简单的方法来生成MachineKey技巧和技巧:ASP.NET IIS...
当发布的其他应用程序的验证票据是通过作为一个隐藏的领域。同时阅读该员额从第一个应用程序,第二个程序将读取加密票和用户进行身份验证。这是一个实例的网页,通过这一员额的领域:
.aspx:
<form id="form1" runat="server">
<div>
<p><asp:Button ID="btnTransfer" runat="server" Text="Go" PostBackUrl="http://otherapp/" /></p>
<input id="hdnStreetCred" runat="server" type="hidden" />
</div>
</form>
代码隐藏:
protected void Page_Load(object sender, EventArgs e)
{
FormsIdentity cIdentity = Page.User.Identity as FormsIdentity;
if (cIdentity != null)
{
this.hdnStreetCred.ID = FormsAuthentication.FormsCookieName;
this.hdnStreetCred.Value = FormsAuthentication.Encrypt(((FormsIdentity)User.Identity).Ticket);
}
}
也见交叉应用程序的形式认证部分第5章中的这个 本书 从Wrox.委员会建议的答复,如上面除了提供一个自制SSO的解决方案。
其他提示
如果您使用的是建造中的成员资格体系,你可以做交叉子认证域有形式身份验证通过利用一些这样在每个网络。config。
<authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="~/Login.aspx" path="/"
protection="All"
domain="datasharp.co.uk"
enableCrossAppRedirects="true" />
</authentication>
确保名称、路径、保护和领域都是相同的所有网。配置.如果站在不同的机器你还需要确保machineKey和验证和加密钥匙都是相同的。
如果你存储用户的会议的数据库,则可以简单地检查存在的Guid在本届会议表,如果存在,然后用户已经过身份验证上的其他领域。对于这项工作,你必须包括该会议guid在URL当你重新定向的用户的其他网站。
不知道你会使用。净但是,通常我们会用 缓存 在灯堆。
该决议取决于应用程序的类型和环境在其它运行。E.g。在内联网与NT域可以使用NTLM通过窗户证书直接的服务器在内联网的周界没有任何必要的重复会议。
该办法如何做到这一般是命名的 单一登录 (见 维基百科).
或者如果你想滚你自己和网站中的问题不在同一服务器上或者没有访问一个共用数据库(在这种情况下,请参见上述答复)然后你可以把一个 网络信标 在每个网站,其中将参考的其他网站。
将一个单一像素的图像(web信号)在现场,它会叫的B站点经过用户标识(加密和时间戳).这将创建一个新的用户会议的B站点的用户,它将被设置为登录。然后当的用户访问过的B站点,他们已被登录。
为尽量减少通话你只能的地方的网络信标的主页上,或记录在确认网页。我用这个成功在过去之间传递信息的合作伙伴的网站。