我想在我的网站上添加以下按钮,为用户提供使用Google,Facebook等更多服务登录的选项.
请回答以下问题:
我感谢您提供的任何其他信息.
谢谢!
我在不同领域的几个网站:example.com
,example.org
,mail.example.com
和passport.example.org
.所有网站都具有共同的外观,应该共享相同的用户群.
在这种极端情况下,我仍然希望所有站点透明地(尽可能地)共享具有以下关键属性的用户会话:
单点登录.当用户passport.example.org
登录并访问任何其他站点时 - 他应该被视为已登录.
登录用户$username
在站点标题和不同的导航菜单中获得"Hello ",问候语,列出他们有权访问的服务.如果他没有登录,而不是打招呼有一个"登录"链接,指向passport.example.org/signon
.
可信域列表是已知的,因此使用OpenID或某些homebrewn轻量级协议实现起来相当简单.当用户第一次访问该站点时,我将其重定向到特殊身份验证端点passport.example.org
,然后以静默方式将其重定向回来,其中包含身份信息(或"未签名"匿名身份).对于大多数浏览器,这是完全透明的 显然,我正在使用nonce值来对抗重定向循环.
单一签收.当用户下次访问任何网站时点击任何网站标题中的"注销"时,他应被视为"未登录".
OpenID不是为此而设计的.我当前的想法(我已经有一个部分工作的实现)是在DB中发送不是用户身份,而是"全局"会话令牌和共享全局会话表(global_session_token↔用户关系).
机器人和无cookie用户支持.站点具有公共区域,用户代理可以访问这些区域而无需任何cookie支持.
因此,我在(1)中提到的重定向成为一个问题,因为对于每个单页请求,我最终都会将用户代理抛给auth端点并返回.这不仅会使机器人感到困惑,而且会很快污染我的会话数据库.我绝对不想显示"嘿,你没有启用cookie,走开!"页面,这是非常粗鲁和令人失望的.虽然我需要cookie支持登录,但我希望用户可以自由阅读网站的内容等等 - 没有任何限制.
而且我明确地不希望把URL中的会话ID,除了我刚才提到了一些透明的跨域重定向.我认为这样做是一个安全问题,通常只是一件坏事.
在这里,我几乎没有想法.
好吧,我知道这很难,但谷歌实际上(这是否在某种程度上google.com
,
google.
很多-的-通用顶级域名,gmail.com
等等),对不对?所以这应该是可能的.
我要感谢协议描述的想法(这是最好的)或系统的链接(要么是代码阅读,要么是直播现场观看和学习)已经成功地实现了这样的事情.
总结一下:几个域没有共同的根,共享用户群,单点登录,单点注销,匿名浏览不需要cookie.
所有站点都在同一个网络上(但在不同的服务器上)并且部分共享同一个PostgreSQL数据库(在同一个数据库的不同方案中).大多数站点都是用Python/Django编写的,但其中一些是使用PHP和Ruby on Rails.虽然我正在考虑与框架和语言无关的东西,但我很感激指向任何实现.即使我不能使用它们,如果我能理解它是如何完成的,那么也许我能够实现类似的东西.
我公司开发和销售拥有数百名客户的SaaS应用程序.我们的一些客户要求我们支持LDAP集成,以便根据现有系统对用户帐户进行身份验证,而不必为每个员工创建另一个登录帐户.这似乎在很多地方被称为单点登录(SSO)?当然,我们的系统已经有一种机制来维护用户帐户配置文件并从我们的登录页面验证这些用户帐户.
我们对LDAP有点无知,对一些事情感到困惑.请原谅可能使用错误的术语(记住,我们对此有点无知).
我们认为我们了解这可能如何工作的基础知识:
假设上述信息甚至是半正确的,我们仍然需要每个用户在我们的系统中拥有一个帐户.我们不需要某种方式将我们的用户帐户配置文件与LDAP目录中的用户配置文件同步吗?这只是一个引用LDAP系统中用户ID的"外部ID"吗?那么是否需要客户的"远程认证"脚本必须向我们的系统提供该ID,以便我们知道系统中哪个用户帐户将登录与?相关联?
我们缺少什么?
顺便说一句,我们的平台是IIS,ASP.Net 2.0和SQL Server 2005.
我一直致力于一个认证和授权模块,类似于stackexchange的实现方式.现在我确信他们使用某种型号的oAuth或令牌生成服务器授权其各种站点使用.我尝试了一点实验.
登录到Stackoverflow后,我从开发者控制台删除了所有cookie.
我保留localstorage对象,其中包含se:fkey xxxxxxxxxxxxxxxxxxxxxxxxx
stackoverflow域的密钥.
stackauth域还有另一个密钥 GlobalLogin: xxxxxxxxxxxxxxxxxxxxxxx
se.fkey,如果我用于会话劫持,没有任何反应.但是GlobalLogin,我能够复制并劫持我的会话.所以,我的查询是,S/O如何处理每个站点的授权后认证.此外,有没有办法在使用一次后使globalLogin无效?
{} EDIT1
所以,仅仅这一点globalLogin
就足够了.如果您可以获得该密钥,只需打开一个私人浏览实例.在登录页面中的stackstuth的Localstorage中,创建key-value
映射并刷新页面.你将登录.
{} EDIT2
的globalLogin
关键似乎是在多个会话保持一致.这是一天,没有刷新我的globalLogin
钥匙.可以安全地假设,如果您的密钥被劫持,攻击者将无限期地访问您的个人资料.
{} EDIT3
对于投票的所有人而言,他们将投票支持这个问题而不是与编程相关的问题.让我这样说吧,我们如何安全地将SSO存储在带有localstorage的Web浏览器上,因为它们容易受到攻击,我们需要做些什么来防止它发生?我的一位同事足够体贴地给我他的GlobalLogin密钥,我能够从另一台计算机上劫持他的会话,尽管它在同一个网络上.
PS:这纯粹是出于理论上的理解,我这样做了.
我正在使用Spring Boot + Spring Security OAuth2应用程序,我认为该应用程序的灵感来自Dave Syer的示例.应用程序配置为OAuth2授权服务器,单个公共客户端使用资源所有者密码凭据流.成功的令牌配置为JWT.
公共Angular客户端向/ oauth/token发送一个POST请求,其中包含一个包含客户端ID和密码的基本auth头(这是让客户端进行身份验证的最简单方法,即使秘密不是私有的).请求正文包含用户名,密码和授予类型"密码".
除了作为身份验证服务器之外,该应用程序还是用户,团队和组织的RESTful资源服务器.
我正在尝试使用Spring Social添加额外的SSO身份验证流程.我已经将Spring Social配置为通过/ auth/[provider]通过外部提供程序进行身份验证; 但是,以下请求不再正确设置SecurityContext.可能是Spring Security OAuth服务器或客户端覆盖了SecurityContext?
如果我可以在Spring Social流程之后正确设置SecurityContext,我有一个新的TokenGranter,允许新的授权类型"social",它将检查SecurityContextHolder以获得预先认证的用户.
我对SecurityContext的特定问题的解决方案感兴趣(我认为这是Spring OAuth +社交集成的问题),或者是与外部提供程序进行身份验证以及从我们自己的auth服务器获取有效JWT的不同方法.
谢谢!
spring-security single-sign-on spring-social spring-boot spring-security-oauth2
我正在使用facebook sdk登录我的应用程序.该应用程序在HTC设备上运行良好.如果没有安装facebook应用程序,该应用程序也可以在三星设备上正常工作.
但是如果手机上已有facebook应用程序,然后用户安装我的应用程序,则用户从未登录.据我所知,我认为这可能是单点登录的问题,我认为这与生成有些关联正确的应用程序哈希键,并使用我用于登录移动应用程序的Facebook应用程序中的哈希键.
请指导我如何创建哈希键.我正在运行ubuntu 10.4.
当我在终端中运行此命令时: -
keytool -exportcert -alias <your keystore alias name>.keystore -keystore ~/.android/<your keystore name>.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)
我从未被提示输入密码,但我获得了哈希密钥.
我希望我的桌面Java应用程序能够与Active Directory用户进行单点登录.分两步,我想:
使用Java:确定当前Windows用户的程序方法我可以获得当前Windows用户的名称,但我可以依赖它吗?我觉得
System.getProperty("user.name")
Run Code Online (Sandbox Code Playgroud)
会不够安全?("user.name"似乎来自环境变量,所以我不能依赖它,我想?)
问题在Linux上使用Java对Active Directory进行 身份验证为我提供了给定名称+ pass的身份验证,但我想根据Windows登录进行身份验证?
对于Active Directory访问,LDAP可能是选择?
我不完全确定我是否提出了正确的问题,但希望有人有一些想法可以转发我.
我正在实施SAML 2.0服务提供商,需要安装SAML 2.0身份提供程序进行测试.鉴于这种需要,身份提供商理想情况下应该是免费的(或具有试用期)并且易于设置和配置.
我正在寻找基本的单点登录和单点注销功能.
我试过Sun Opensso Enterprise.价格是正确的,但到目前为止,配置是一场噩梦.此外,它的错误消息和日志记录还有很多不足之处,我经常在解决一个基本上归结为错误配置或违反直觉的默认设置的问题.
我已经看到了关于它应该如何与旧版本一起工作的答案,
DefaultHttpClient
但是没有一个很好的例子HttpURLConnection
我正在使用HttpURLConnection
Web应用程序发出请求.在我的Android应用程序开始时,我使用CookieHandler.setDefault(new CookieManager())
自动处理会话cookie,这工作正常.
在登录后的某个时刻,我想用Web应用程序向用户显示实时页面WebView
而不是在后台下载数据HttpURLConnection
.但是,我想使用我之前建立的相同会话来防止用户再次登录.
如何复制饼干从java.net.CookieManager
使用HttpURLConnection
到android.webkit.CookieManager
使用的WebView
,所以我可以共享会话?
cookies android httpurlconnection single-sign-on android-webview
OAuth2的规范规定授权服务器在使用隐式授权时不得发出刷新令牌.在我们的用例中,我们使用OAuth2保护RESTful API,并使用单页Javascript应用程序作为此API的客户端.由于在访问令牌过期后重定向到授权服务器非常困难,我们正在寻找更好的方法来获取新的有效令牌.我可以考虑两种不同的方法,并想知道哪一种可能更好:
使用隐藏的iframe重新请求有效的访问令牌.为此,必须包含一个参数,例如"prompt = none",它告诉OAuth提供者既不挑战认证,也不显示授权页面.如果用户已通过身份验证并已授权应用程序,则服务器将在URL#parameters中发回访问令牌.如果未满足上述条件之一,它将重定向,并出现错误,如#error = authentication%20lost.通过这种行为,我们可以使用具有隐式流的短期访问令牌.
我们可以使用一个额外的范围(例如离线)来告诉服务器分发刷新令牌.即使原始规范说隐式流不会发出刷新令牌(如果客户端仅将OAuth用于第一次授权,这是正确的),您可以自由地为您的特定应用程序定义自己的作用域.您应该考虑仅允许来自知名客户端的此范围.
这两种方法都与OpenID Connect非常相似.不幸的是,目前OpenID Connect的实现并不多.因此,第一步是扩展OAuth2服务器,直到OIC更受欢迎.
那么哪种方法应该首选?
编辑:令牌端点需要客户端身份验证,这仅适用于机密客户端,如服务器端应用程序.使用第二种方法,只有在我们的情况下,RESTful API才能使资源提供者刷新令牌并将其发送回客户端.我认为这会带来安全风险.所以我们可能只有一种有效的方法.
restful-authentication single-sign-on oauth-2.0 single-page-application