在SAML元数据文件中,定义了几种NameID格式,例如:
<NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified</NameIDFormat>
<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
Run Code Online (Sandbox Code Playgroud)
谁能解释一下这些用途是什么?有什么区别?
我们提供多种在线服务.如果用户从一个服务(on domain1.com
)转移到另一个服务(on domain2.com
),我们需要开发一个为用户提供快速/简单体验的系统.
一旦他转移到新服务后,是否有一种安全可靠的方式自动登录用户?
如果下面的解决方案完全不安全/错误,请对我大喊大叫.
我们正在考虑一个类似于许多在线服务提供的用于密码恢复的系统 - 它们通过电子邮件发送一个带有唯一哈希的链接,该链接过期,允许他们更改密码.
该domain1.com
会生成一个唯一的哈希值,并将其存储在连接到用户以及一个到期时间字段的哈希数据库.
用户将被转移到 domain2.com/auto/?hash=d41d8cd98f00b204e9800998ecf8427e
domain2.com
接下来将domain1.com
使用散列请求获取有关用户的信息.domain1.com
然后将从数据库中删除哈希.domain2.com
会记录用户并设置cookie等
可以基于OpenID或OAuth获得相同的结果吗?
我想先说这个,直到现在,我甚至没有听过SAML,更不用说涉及它的SSO策略了.这一点,加上我几乎没有做节点一年的事实,就是一个光荣的新手三明治.目前,我有一个客户端使用SAML和ADFS作为他们的SSO提供商.我已经使用passport.js进行本地登录,因此使用passport-saml似乎是使用SAML/ADFS实现SSO的方法.在进行我的研究时,我发现了几个不同的实现指南,但由于我完全不了解这个过程,我可以使用一些指针.
在passport-saml文档中,我找到了以下证明适用于ADFS的策略(根据文档):
{
entryPoint: 'https://ad.example.net/adfs/ls/',
issuer: 'https://your-app.example.net/login/callback',
callbackUrl: 'https://your-app.example.net/login/callback',
cert: 'MIICizCCAfQCCQCY8tKaMc0BMjANBgkqh ... W==',
identifierFormat: null
}
Run Code Online (Sandbox Code Playgroud)
我想我的主要问题是这个证书来自哪里?这是我通过SSL在我的服务器上生成的证书吗?提供商是否提供此服务?
在我的搜索中,我也发现了这个:https://github.com/auth0/passport-wsfed-saml2,它基于passport-saml.为ADFS建议以下配置:
{
path: '/login/callback',
realm: 'urn:node:app',
homeRealm: '', // optionally specify an identity provider
identityProviderUrl: 'https://auth10-dev.accesscontrol.windows.net/v2/wsfederation',
cert: 'MIIDFjCCAf6gAwIBAgIQDRRprj9lv5 ... ='
}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,路径对象是显而易见的,我的提供者已经给了我一个providerURL.但是对我来说,境界毫无意义,而且还有那种证明.
有人能为我提供一个在node.js网站上实现SAML/ADFS SSO的"类似于解释的方式"吗?或者帮助我对我概述的两个解决方案所要求的论证对象做出正面或反面的讨论?非常感谢提前!
在你没有做任何作业的情况下让我问过于基本的问题之前,我想说我一直在做很多关于这些主题的阅读,但我仍然感到困惑.
我的需求似乎很简单.在我的公司,我们有一堆Ruby on Rails应用程序.我想构建一个所有这些应用程序都应该使用的SSO身份验证服务.
我试着做一些关于如何做到这一点的研究CAS
,SAML
并且阅读了OAuth2
.(我知道OAuth中的"Auth"代表授权,而不是身份验证,但我阅读了足够多的文章,说明如何使用OAuth进行身份验证 - 这就是其中之一.)
有人能用简单的语言告诉我这三个是什么吗?他们是替代品(竞争)吗?比较它们甚至是正确的吗?
而且有很多宝石似乎都在说非常相似的东西:
我只想要一个单独的Rails应用程序来处理我的其他Rails应用程序的所有身份验证.
注意:我不想让用户使用他们的Google/Facebook帐户登录.我们的用户已在我们的网站上拥有帐户.我希望他们能够使用该帐户登录一次,并且无需再次登录即可访问我们的所有应用程序.在任何应用中注销都应该在所有应用中签名.
UPDATE
我遇到过这两个OAuth解决方案:
他们似乎在描述与我想要的非常相似的东西.但我还没有找到任何指南/博客文章/教程,展示如何使用SAML/CAS执行此操作.
建议欢迎.
更新2
关于我们用例的更多细节.
我们没有任何现有的SAML架构.主要是我们的用户(直接在我们的网站上注册)将访问我们的所有应用程序.将来,我们可能会有第三方(合作伙伴)公司调用我们的API.我们也可能有来自这些第三方(合作伙伴)公司(在其网站上注册)访问我们的应用程序的用户.
我正在尝试使用SAML了解SSO.我遇到了RelayState参数,并且非常混淆为什么它首先在SSO中发送编码的URL?究竟是什么意思?
请阅读Google Developer文档中的以下内容:
Google会生成SAML身份验证请求.SAML请求已编码并嵌入到合作伙伴的SSO服务的URL中.包含用户尝试访问的Google应用程序的编码URL的RelayState参数也嵌入在SSO URL中.此RelayState参数是一个不透明的标识符,无需任何修改或检查即可传回
使用OAuth时(2)我需要在我的应用程序中使用重定向端点,一旦我通过身份验证,OAuth提供服务就可以重定向到该端点.
如何在单页面应用程序中处理此问题?当然,重定向到OAuth提供服务并不好,甚至可能无法重定向.
我知道OAuth还支持基于用户名/密码的令牌生成.这与AJAX调用完美配合,但要求我的单页应用程序要求输入用户名和密码.
你通常如何处理这个?
我正在尝试设计一个绿色领域项目,该项目将包含多个服务(服务数据)和Web应用程序(提供HTML).我读过微服务,看起来很合适.
我还有的问题是如何实现SSO.我希望用户进行一次身份验证,并可以访问所有不同的服务和应用程序.
我可以想到几种方法:
添加身份服务和应用程序.任何具有受保护资源的服务都将与Identity服务通信,以确保其拥有的凭据有效.如果不是,它将重定向用户进行身份验证.
使用诸如OpenID之类的Web标准,并让每个服务处理它自己的身份.这意味着用户必须单独授权每个服务/应用程序,但之后它将是SSO.
我很乐意听到其他想法.如果特定PaaS(例如Heroku)具有也可接受的专有解决方案.
我已经对这个主题做了很多研究,并且自己实施了很多解决方案.
包括OpenID,Facebook Connect(使用旧的Rest API和新的Graph OAuth 2.0 API),使用twitter登录(据我所知,目前已经升级到完全合格的OpenID),依此类推......
但我仍然缺少的是完美的一体化解决方案.
在我的研究期间,我偶然发现了一些有趣的项目:
但我不想依赖外部提供商,我也想要一个免费的解决方案,所以我不受限制.
我还看到开发人员在遵循提供程序指令并为所有内容设置模型和数据库表之后,一个接一个地实现一个服务.
当然这可以工作,但它是一大堆工作,总是需要开发和更改您的应用程序等.
我正在寻找的是一个抽象层,它将所有服务都带到一个可以集成到我网站的标准中.一旦出现新服务,我只想添加一个处理该特定提供者抽象的模型,这样我就可以将它无缝地集成到我的应用程序中.
或者更好的是,找到一个我可以下载的现有解决方案.
理想情况下,这个抽象服务将独立于我的应用程序托管,因此它可以用于多个应用程序并独立升级.
上述3种解决方案中的最后一种看起来很有希望.一切都只是移植到合成的OpenID,网站jut必须实现OpenID.
过了一会儿,我找到了Django socialauth,一个基于python的Django Webframework身份验证系统.但它看起来像上面描述的那样运行,我认为这是Stackoverflow使用的相同登录系统(或者至少是一些修改过的fork ...).
我下载了它,并试图设置它,看看它是否可以设置为一个独立的解决方案,但我没有运气,因为我也不是这样的python.
我很想要一个基于PHP的解决方案.
所以在这篇长篇文章之后,我的问题恰恰是:
我希望这个问题不是太主观,提前谢谢.
更新:我的结论是构建一个代理/包装器或者你可以称之为Facebook的东西,将它移植到一个OpenID,因此它成为一个OpenID端点/提供者将是最好的选择.这就是我所做的.
请参阅下面的答案.
我添加了赏金以获得反馈/讨论.Maby我的方法并不像我现在认为的那样好!
SAML SSO通常如何实施?
我已经读过这个(nb已过时)关于在Google Apps上使用SAML以及在SAML上使用维基百科条目.
维基百科条目讨论了使用包含SAMLRequest和SAMLResponse详细信息的表单进行响应.这是否意味着用户必须以物理方式提交表单才能继续进行单点登录?
谷歌条目谈到使用重定向,这对我来说似乎更无聊.但是,它还讨论了如何使用用户必须提交的响应表单(尽管它确实讨论了使用JavaScript自动提交表单).
这是标准的做法吗?使用重定向和JavaScript进行表单提交?
有没有人知道如何在Windows域和J2EE Web应用程序之间实现SSO的任何其他好资源.Web应用程序位于单独的网络/域中.我的客户想要使用CA Siteminder(使用SAML).
我是SAML v2.0技术的初学者,我掌握了理论知识,但我没有在Google上找到任何示例.任何人都可以为我提供简单的"SAML for v2.0"的分步示例.