标签: single-sign-on

使用CAS或OAuth进行SSO?

我想知道是否应该使用CAS协议或OAuth +某些身份验证提供程序进行单点登录.

示例场景:

  1. 用户尝试访问受保护资源,但未经过身份验证.
  2. 应用程序将用户重定向到SSO服务器.
  3. 如果通过身份验证,则用户从SSO服务器获取令牌.
  4. SSO重定向到原始应用程序.
  5. 原始应用程序根据SSO服务器检查令牌.
  6. 如果令牌没问题,将允许访问,并且应用程序知道用户ID.
  7. 用户执行注销并同时从所有连接的应用程序注销(单点注销).

据我所知,这正是CAS发明的.CAS客户端必须实现CAS协议才能使用身份验证服务.现在我想知道在客户(消费者)网站上使用CAS或OAuth.OAuth是CAS的那部分的替代品吗?OAuth作为新的事实上的标准应该优先考虑吗?是否有一个易于使用的(不是Sun的OpenSSO!)更换为CAS支持不同的方法,如用户名/密码,OpenID的,TLS certifactes认证部...?

语境:

  • 不同的应用程序应该依赖于SSO服务器的身份验证,并且应该使用类似会话的东西.
  • 应用程序可以是GUI Web应用程序或(REST)服务.
  • SSO服务器必须提供用户标识,这是从中央用户信息存储获取有关用户的更多信息(如角色,电子邮件等)所必需的.
  • 单签出应该是可能的.
  • 大多数客户端都是用Java或PHP编写的.

我刚刚发现WRAP,它可能成为OAuth的继任者.这是微软,谷歌和雅虎指定的新协议.

附录

我了解到OAuth不是为验证而设计的,即使它可用于实现SSO,但只能与OpenID等SSO服务一起使用.

OpenID在我看来是"新CAS".CAS具有OpenID未命中的一些功能(如单点注销),但在特定场景中添加缺失部分并不困难.我认为OpenID已被广泛接受,最好将OpenID集成到应用程序或应用程序服务器中.我知道CAS也支持OpenID,但我认为CAS对OpenID来说是可有可无的.

security cas oauth single-sign-on

177
推荐指数
5
解决办法
7万
查看次数

单个登录跨多个域

我们公司设有多个域,每个域上都有一个网站.此时,每个域都有自己的身份验证,通过cookie完成.

当登录到一个域的某个人需要访问另一个域的任何内容时,用户需要使用位于另一个域的另一个网站上的不同凭据再次登录.

我正在考虑转向单点登录(SSO),这样就可以消除这种麻烦.我很感激有关如何实现这一点的任何想法,因为我在这方面没有任何经验.

谢谢.

编辑: 网站是互联网(外部)和内部网(公司内部使用)网站的混合.

authentication single-sign-on

106
推荐指数
4
解决办法
8万
查看次数

使用JWT进行跨域身份验证的单点登录流程

网上有很多关于使用JWT(Json Web Token)进行身份验证的信息.但是,在多域环境中使用JWT令牌作为单点登录解决方案时,我仍然没有找到明确的解释.

我在一家公司工作,该公司在不同的主机上有很多站点.我们使用example1.comexample2.com.我们需要一个单点登录解决方案,这意味着如果用户在example1.com上进行身份验证,我们希望他也可以自动在example2.com上进行身份验证.

使用OpenId Connect流程,我了解想要在example1.com上进行身份验证的用户将首先被重定向到身份验证服务器(或OP"OpenId Provider").用户在该服务器上进行身份验证,然后使用签名的JWT令牌将其重定向回原始example1.com站点.(我知道有另一个流程返回一个中间令牌,以后可以将其交换为真正的JWT令牌,但我不认为这对我们来说是必需的)...

所以现在用户回到example1.com并进行身份验证!他可以发出请求,在Authentication标头中传递JWT令牌,服务器能够验证签名的JWT,因此能够识别用户.太好了!

第一个问题:

如何将JWT令牌存储在客户端上?还有很多关于此的信息,人们似乎同意使用Web Storage是走的路而不是好的旧路cookies.我们希望JWT在浏览器重启之间保持一致,所以让我们使用Local Storage,而不是Session Storage......

现在用户可以重新启动他的浏览器,只要JWT令牌没有过期,他仍然会在example1.com上进行身份验证!

此外,如果example1.com需要向我们的另一个域发出Ajax请求,我理解配置CORS会允许这样做.但我们的主要用例不是跨域请求,它有一个单点登录解决方案!

因此,主要问题是:

现在,流程应该是什么,如果用户访问example2.com并且我们希望他使用他已经拥有的JWT令牌进行身份验证?Local Storage似乎不允许跨域访问,所以此时浏览器无法读取JWT令牌以向example2.com发出请求!

应该 :

  • 用户是否会再次重定向到身份验证服务器?当用户对example1.com进行身份验证时, 身份验证服务器 …

authentication single-sign-on jwt openid-connect

101
推荐指数
3
解决办法
4万
查看次数

SP发起的SSO和IDP发起的SSO之间的差异

任何人都可以向我解释SP发起的SSOIDP发起的SSO之间的主要区别是什么,包括哪个是与ADFS + OpenAM Federation一起实现单点登录的更好解决方案?

single-sign-on adfs2.0 openam

99
推荐指数
3
解决办法
16万
查看次数

AdminTokenAction:致命错误:无法获取应用程序SSO令牌

我试图用apache tomcat代理安装openam 12 war,如配置sso.But尝试了五十多次,但我只得到错误.

如果我将以下属性值更改为来自webagent的amAdmin,则在tomcat第二个实例中调用受保护的应用程序时,它会一次又一次地重定向到同一页面,但没有得到任何异常.amAdmin是我的openam控制台的管理员用户.

OpenSSOAgentBootstrap.properties/com.sun.identity.agents.app.username =
Run Code Online (Sandbox Code Playgroud)

Tomcat日志中的异常

Apr 16, 2015 5:41:10 PM org.apache.tomcat.util.digester.Digester startElement
SEVERE: Begin event threw error
java.lang.ExceptionInInitializerError
    at com.sun.identity.agents.arch.AgentConfiguration.bootStrapClientConfiguration(AgentConfiguration.java:727)
    at com.sun.identity.agents.arch.AgentConfiguration.initializeConfiguration(AgentConfiguration.java:1140)
    at com.sun.identity.agents.arch.AgentConfiguration.<clinit>(AgentConfiguration.java:1579)
    at com.sun.identity.agents.arch.Manager.<clinit>(Manager.java:675)
    at com.sun.identity.agents.tomcat.v6.AmTomcatRealm.<clinit>(AmTomcatRealm.java:67)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:374)
    at org.apache.tomcat.util.digester.ObjectCreateRule.begin(ObjectCreateRule.java:145)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1288)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:182)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1342)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2770)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:606)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:848)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:649)
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1561)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:615)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:663)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …
Run Code Online (Sandbox Code Playgroud)

java single-sign-on openam

69
推荐指数
1
解决办法
6275
查看次数

C#ASP.NET单点登录实现

我的任务是为我们的客户实施单点登录,作为我们下一版本的一部分.流程存在如下:

  1. 用户使用学校提供给他/她的学生ID /密码登录学校的主门户系统.
  2. 用户单击指向我公司产品的链接.
  3. 用户将自动进入仪表板页面,就像他们刚刚通过我们网站上的登录表单登录一样.

因此,有两种机制可以将用户身份验证到我们的站点:

  1. 来到我们产品的主页,使用我们存储在本地系统中的电子邮件/密码登录.
  2. 使用单点登录,学生已使用学生ID和密码登录学校的主系统.

如果我们的产品实现在ASP.NET中(而不是Java/Ruby),我们应该使用CAS,JOSSO还是其他一些第三方单点登录产品?或者.NET环境中是否有可用的东西,对于我们作为.NET公司来说更简单?

c# asp.net single-sign-on

68
推荐指数
4
解决办法
16万
查看次数

是否可以检查Facebook上是否确认了电子邮件?

更新

这是在2013年12月16日通过https://www.facebook.com/whitehat/report/向Facebook报道的,Facebook 于12月17日回复说该错误早已得到修复.

我用我的Facebook帐户重新测试了这个(我还没有验证电子邮件地址),使用Grap API Explorer工具时,无法使用Graph API或使用FQL查询获取此帐户的电子邮件地址.

结论:使用Graph API或FQL查询从Facebook获得的电子邮件地址是经过验证的电子邮件.如果某个帐户尚未验证其电子邮件,则无法获得该帐户.

原帖

我正在制作一个带有SSO的网络应用程序,用户可以通过Google或Facebook登录.我希望拥有这两种类型帐户的用户在我的系统中显示为同一用户,无论他们使用哪种身份登录.为了实现这一点,我正在考虑使用电子邮件地址作为标识符来了解我是否应该创建一个新帐户或者用户是否已经存在.

为了不引入任何安全问题,我必须知道电子邮件地址已经过验证,并且实际上属于用户.对于Google,userinfo API可以告诉我电子邮件是否已经过验证,因此这里没有问题.但我在Facebook Graph API中找不到这样的东西.

是否有可能知道Facebook上是否确认了电子邮件地址?

我知道有一个verified字段,但这只会告诉帐户是否经过验证而不是电子邮件地址.

起初看起来您只能将图谱API用于已确认电子邮件地址的帐户.如果地址未得到确认,我只是在收到错误时告诉我必须先确认电子邮件地址才能登录任何第三方网站.

然而,对于所有帐户而言,这似乎并非如此.在某些情况下,即使您没有确认的电子邮件地址,也可以访问Facebook的所有部分.例如,当您使用@ myopera.com邮件地址注册时.

当您使用@ myopera.com电子邮件地址注册Facebook时,您会收到一条消息,表明您的帐户在提交注册表单后已暂时锁定.要继续,您需要提供您的电话号码以验证您的帐户并"保持Facebook安全且免受垃圾邮件"(对于屏幕截图中的瑞典语,这是在我进入Facebook并将语言更改为英语之前):

报名参加期间的安全检查

当您提供电话号码时,您已登录,Facebook不会再唠叨您必须验证您的电子邮件地址.

您可以在设置页面上看到尚未验证您的电子邮件地址的唯一位置:

Facebook设置视图与未经证实的电子邮件地址

在您验证电子邮件地址之前通常无法访问的移动设置可用,并列出注册期间输入的电话号码:

Facebook移动设置视图与未经证实的电子邮件地址

除此之外,还可以使用未经证实的电子邮件地址登录第三方站点:

使用未经证实的电子邮件地址登录图形API资源管理器

当我使用此用户连接到图形API时,我可以获得未经证实的电子邮件地址,并且该verified字段按预期返回true,因为我已通过添加电话号码验证了帐户.显然我不相信我从Facebook获得的电子邮件地址真的属于拥有Facebook帐户的用户.

有没有其他方法可以知道电子邮件地址是否经过验证,或者如果我想用它来识别用户,我是否必须自己验证?

security facebook single-sign-on facebook-graph-api facebook-authentication

65
推荐指数
2
解决办法
2万
查看次数

使用Django实现单点登录(SSO)

我想使用Django为我们当前使用的多个应用程序实现单点登录(SSO).如何使用Django实现SSO?有没有可用于实施SSO的Django软件包?

请帮助谢谢

python django single-sign-on

55
推荐指数
5
解决办法
4万
查看次数

公共SAML v2服务提供商进行测试?

我想知道是否有任何公开可用的SAML v2 SP可用于测试.

我认为Salesforce和Google应用程序都有一个兼容的SSO解决方案,但我只是不确定如何获取访问权限(并且不清楚它是否成本.)

也许我应该在另一个盒子上设置SP(使用OpenSSO或其他东西)?提前致谢.

testing saml single-sign-on service-provider

54
推荐指数
5
解决办法
5万
查看次数

ADFS,WIF,WS Federation,SAML和STS之间有什么区别?

这些是用于Microsoft服务单点登录的众多技术和流行语.

有人可以解释ADFS,WIF,WS联合,SAML和STS(安全令牌服务),包括每个使用的位置和时间.

adfs saml wif single-sign-on ws-federation

53
推荐指数
2
解决办法
5万
查看次数