我有几个网站(Asp.Net),我希望单独登录...

我希望用户访问Site1并让Site1联系中央单点登录服务器(SSS)。

然后,SSS将确定用户未登录(不确定如何)并将用户重定向到登录屏幕(仍在SSS上)。

如果经过身份验证,则会将用户重定向回Site1。

Site1会将此到达视为新的,并且可能会询问SSS用户是否已登录。这次SSS会建议相关用户确实登录。所以Site1可以将这个事实存储在它的会话中以供将来参考(可能有一些合适的超时)

Site1将包含指向用户可能选择关注的Site2的链接。

到达Site2应触发Site2尝试对用户进行身份验证。

如何识别到达Site2的用户是否已经访问过Site1并发现他们已经过身份验证,以便他们无需再次登录?

注意:SSS需要是我控制帐户创建的私有系统。所以我担心我不能依赖外部OpenID服务器

更新:我目前无法保证Site1,Site2和SSS将在同一个域内...所以我不会认为 Cookie会将其删除。

有帮助吗?

解决方案

不要如此迅速地丢弃OpenID - 作为网站所有者,您可以选择自己选择支持的OpenID提供商。您可以选择运行自己的OpenID服务器并仅信任它。

另外,请记住,OpenID是一个身份验证系统 - 用户X如何证明他们是他们所说的人。

在StackOverflow上,当有人使用OpenID登录时,他们会自动创建帐户 - 但您不必这样做。您可以完全控制帐户创建,并且每个帐户都有一个OpenID。

请记住,(通常)您不必编写和维护的任何软件都是一件好事。

其他提示

以与其他人一样的方式执行此操作,使用GET或POST在站点之间传递数据库生成的令牌,然后将这些令牌验证回到直接与DB通信的Web服务。

所以用户想进入网站1(www.domain1.com)。站点1检查本地域登录会话/ cookie,找不到任何用户,将用户重定向到 http:/ /logindomain.com/?return=www.domain1.com 。如果存在较早的logindomain cookie(从登录到附属站点),请将其发送回站点1.如果不存在,请执行您需要的任何用户身份验证(KERBEROS检查,表单身份验证,openID等)以生成唯一令牌。将其存储在logindomain的cookie中,并将它们重定向回“return”的任何位置。指出,附上您的令牌: http://www.domain1.com/?token=123456 。一旦domain1针对Web服务(或直接使用令牌DB)验证令牌,它就可以使用用户凭据设置自己的本地登录会话/ cookie。

所以现在你在2站点(www.domain2.com)并进入登录。你会再次使用?return var set重定向到logindomain,但这次没有要求你输入密码 - 它已经在你的SSO cookie中有你的令牌。您会立即重定向回到: http://www.domain2.com/?token=123456(与使用的site1相同)。 Domain2再次验证令牌,让您无需密码检查。

如果您正在动态更改登录网址或尝试制作混合的AD / Forms Auth怪物(例如我的任务是构建),它会变得有点复杂,但这似乎工作正常且完全匹配(在高级别)IBM和MS文档所说的专有SSO系统。

您可以尝试使用共享会话状态服务器。

您可以使用Cookie为用户存储和创建身份验证票证。我们已经多次这样做了,而且效果很好。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top