标签: single-sign-on

如何将Google,Facebook,Yahoo等社交登录服务添加到我的网站?

我想在我的网站上添加以下按钮,为用户提供使用Google,Facebook等更多服务登录的选项.

登录选项

请回答以下问题:

  1. 如何免费添加这样的各种服务?(请注意,我不想使用像Janrain这样的任何付费服务)
  2. 如何将存储在帐户中的用户的用户信息(如电子邮件,电话号码)存储到我的数据库中?
  3. 请提供可以使用的任何链接/库.

我感谢您提供的任何其他信息.

谢谢!

openid login single-sign-on

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

多个站点的透明用户会话(单点登录+单点登录)

我在不同领域的几个网站:example.com,example.org,mail.example.compassport.example.org.所有网站都具有共同的外观,应该共享相同的用户群.

在这种极端情况下,我仍然希望所有站点透明地(尽可能地)共享具有以下关键属性的用户会话:

  1. 单点登录.当用户passport.example.org登录并访问任何其他站点时 - 他应该被视为已登录.

    登录用户$username在站点标题和不同的导航菜单中获得"Hello ",问候语,列出他们有权访问的服务.如果他没有登录,而不是打招呼有一个"登录"链接,指向passport.example.org/signon.

    可信域列表是已知的,因此使用OpenID或某些homebrewn轻量级协议实现起来相当简单.当用户第一次访问该站点时,我将其重定向到特殊身份验证端点passport.example.org,然后以静默方式将其重定向回来,其中包含身份信息(或"未签名"匿名身份).对于大多数浏览器,这是完全透明的 显然,我正在使用nonce值来对抗重定向循环.

  2. 单一签收.当用户下次访问任何网站时点击任何网站标题中的"注销"时,他应被视为"未登录".

    OpenID不是为此而设计的.我当前的想法(我已经有一个部分工作的实现)是在DB中发送不是用户身份,而是"全局"会话令牌和共享全局会话表(global_session_token↔用户关系).

  3. 机器人和无cookie用户支持.站点具有公共区域,用户代理可以访问这些区域而无需任何cookie支持.

    因此,我在(1)中提到的重定向成为一个问题,因为对于每个单页请求,我最终都会将用户代理抛给auth端点并返回.这不仅会使机器人感到困惑,而且会很快污染我的会话数据库.我绝对不想显示"嘿,你没有启用cookie,走开!"页面,这是非常粗鲁和令人失望的.虽然我需要cookie支持登录,但我希望用户可以自由阅读网站的内容等等 - 没有任何限制.

    而且我明确地希望把URL中的会话ID,除了我刚才提到了一些透明的跨域重定向.我认为这样做是一个安全问题,通常只是一件坏事.

    在这里,我几乎没有想法.

好吧,我知道这很难,但谷歌实际上(这是否在某种程度上google.com, google.很多-的-通用顶级域名,gmail.com等等),对不对?所以这应该是可能的.

我要感谢协议描述的想法(这是最好的)或系统的链接(要么是代码阅读,要么是直播现场观看和学习)已经成功地实现了这样的事情.

总结一下:几个域没有共同的根,共享用户群,单点登录,单点注销,匿名浏览不需要cookie.

所有站点都在同一个网络上(但在不同的服务器上)并且部分共享同一个PostgreSQL数据库(在同一个数据库的不同方案中).大多数站点都是用Python/Django编写的,但其中一些是使用PHP和Ruby on Rails.虽然我正在考虑与框架和语言无关的东西,但我很感激指向任何实现.即使我不能使用它们,如果我能理解它是如何完成的,那么也许我能够实现类似的东西.

authentication session single-sign-on

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

如何为我的Web应用程序构建LDAP集成?

我公司开发和销售拥有数百名客户的SaaS应用程序.我们的一些客户要求我们支持LDAP集成,以便根据现有系统对用户帐户进行身份验证,而不必为每个员工创建另一个登录帐户.这似乎在很多地方被称为单点登录(SSO)?当然,我们的系统已经有一种机制来维护用户帐户配置文件并从我们的登录页面验证这些用户帐户.

我们对LDAP有点无知,对一些事情感到困惑.请原谅可能使用错误的术语(记住,我们对此有点无知).

我们认为我们了解这可能如何工作的基础知识:

  • 我们的客户将其帐户配置为"开启"其帐户的"远程身份验证"功能.它们提供将对其用户进行身份验证的远程URL.
  • 用户进入我们的登录页面并尝试使用其公司的LDAP系统提供的用户名和密码进行登录.
  • 我们的登录页面将安全地将登录凭证(可能是加密的并以某些商定的格式进行散列)转发到我们客户提供的"远程验证"URL.
  • 客户的脚本将对用户进行身份验证,然后使用"身份验证状态"将其重定向回我们的站点.
  • 我们的页面将分析"身份验证状态",并接受用户登录与否.

假设上述信息甚至是半正确的,我们仍然需要每个用户在我们的系统中拥有一个帐户.我们不需要某种方式将我们的用户帐户配置文件与LDAP目录中的用户配置文件同步吗?这只是一个引用LDAP系统中用户ID的"外部ID"吗?那么是否需要客户的"远程认证"脚本必须向我们的系统提供该ID,以便我们知道系统中哪个用户帐户将登录与?相关联?

我们缺少什么?

顺便说一句,我们的平台是IIS,ASP.Net 2.0和SQL Server 2005.

ldap saas single-sign-on

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

Stackoverflow使用localstorage进行授权似乎不安全.这是否正确,我们如何加强它?

我一直致力于一个认证和授权模块,类似于stackexchange的实现方式.现在我确信他们使用某种型号的oAuth或令牌生成服务器授权其各种站点使用.我尝试了一点实验.

登录到Stackoverflow后,我从开发者控制台删除了所有cookie.

我保留localstorage对象,其中包含se:fkey xxxxxxxxxxxxxxxxxxxxxxxxxstackoverflow域的密钥.

stackauth域还有另一个密钥 GlobalLogin: xxxxxxxxxxxxxxxxxxxxxxx

se.fkey,如果我用于会话劫持,没有任何反应.但是GlobalLogin,我能够复制并劫持我的会话.所以,我的查询是,S/O如何处理每个站点的授权后认证.此外,有没有办法在使用一次后使globalLogin无效?

{} EDIT1

所以,仅仅这一点globalLogin就足够了.如果您可以获得该密钥,只需打开一个私人浏览实例.在登录页面中的stackstuth的Localstorage中,创建key-value映射并刷新页面.你将登录.

{} EDIT2

globalLogin关键似乎是在多个会话保持一致.这是一天,没有刷新我的globalLogin钥匙.可以安全地假设,如果您的密钥被劫持,攻击者将无限期地访问您的个人资料.

{} EDIT3

对于投票的所有人而言,他们将投票支持这个问题而不是与编程相关的问题.让我这样说吧,我们如何安全地将SSO存储在带有localstorage的Web浏览器上,因为它们容易受到攻击,我们需要做些什么来防止它发生?我的一位同事足够体贴地给我他的GlobalLogin密钥,我能够从另一台计算机上劫持他的会话,尽管它在同一个网络上.

设置GlobalLogin密钥寿命

PS:这纯粹是出于理论上的理解,我这样做了.

javascript html5 authorization single-sign-on local-storage

34
推荐指数
1
解决办法
1974
查看次数

整合Spring Security OAuth2和Spring Social

我正在使用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

32
推荐指数
2
解决办法
8589
查看次数

使用facebook sdk为app生成哈希键

我正在使用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)

我从未被提示输入密码,但我获得了哈希密钥.

android openssl keytool single-sign-on facebook-graph-api

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

如何使用Windows登录进行单点登录和桌面Java应用程序的Active Directory条目?

我希望我的桌面Java应用程序能够与Active Directory用户进行单点登录.分两步,我想:

  1. 确保特定用户已使用某些用户条目登录到Windows.
  2. 从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可能是选择?

我不完全确定我是否提出了正确的问题,但希望有人有一些想法可以转发我.

java active-directory windows-authentication single-sign-on

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

您能否推荐SAML 2.0身份提供商进行测试?

我正在实施SAML 2.0服务提供商,需要安装SAML 2.0身份提供程序进行测试.鉴于这种需要,身份提供商理想情况下应该是免费的(或具有试用期)并且易于设置和配置.

我正在寻找基本的单点登录和单点注销功能.

我试过Sun Opensso Enterprise.价格是正确的,但到目前为止,配置是一场噩梦.此外,它的错误消息和日志记录还有很多不足之处,我经常在解决一个基本上归结为错误配置或违反直觉的默认设置的问题.

testing saml single-sign-on

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

将Cookie从HttpURLConnection(java.net.CookieManager)传递到WebView(android.webkit.CookieManager)

我已经看到了关于它应该如何与旧版本一起工作的答案,DefaultHttpClient 但是没有一个很好的例子HttpURLConnection

我正在使用HttpURLConnectionWeb应用程序发出请求.在我的Android应用程序开始时,我使用CookieHandler.setDefault(new CookieManager())自动处理会话cookie,这工作正常.

在登录后的某个时刻,我想用Web应用程序向用户显示实时页面WebView而不是在后台下载数据HttpURLConnection.但是,我想使用我之前建立的相同会话来防止用户再次登录.

如何复制饼干从java.net.CookieManager使用HttpURLConnectionandroid.webkit.CookieManager使用的WebView,所以我可以共享会话?

cookies android httpurlconnection single-sign-on android-webview

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

在OAuth2隐式授权中处理过期的访问令牌

OAuth2的规范规定授权服务器在使用隐式授权时不得发出刷新令牌.在我们的用例中,我们使用OAuth2保护RESTful API,并使用单页Javascript应用程序作为此API的客户端.由于在访问令牌过期后重定向到授权服务器非常困难,我们正在寻找更好的方法来获取新的有效令牌.我可以考虑两种不同的方法,并想知道哪一种可能更好:

  1. 使用隐藏的iframe重新请求有效的访问令牌.为此,必须包含一个参数,例如"prompt = none",它告诉OAuth提供者既不挑战认证,也不显示授权页面.如果用户已通过身份验证并已授权应用程序,则服务器将在URL#parameters中发回访问令牌.如果未满足上述条件之一,它将重定向,并出现错误,如#error = authentication%20lost.通过这种行为,我们可以使用具有隐式流的短期访问令牌.

  2. 我们可以使用一个额外的范围(例如离线)来告诉服务器分发刷新令牌.即使原始规范说隐式流不会发出刷新令牌(如果客户端仅将OAuth用于第一次授权,这是正确的),您可以自由地为您的特定应用程序定义自己的作用域.您应该考虑仅允许来自知名客户端的此范围.

这两种方法都与OpenID Connect非常相似.不幸的是,目前OpenID Connect的实现并不多.因此,第一步是扩展OAuth2服务器,直到OIC更受欢迎.

那么哪种方法应该首选?

编辑:令牌端点需要客户端身份验证,这仅适用于机密客户端,如服务器端应用程序.使用第二种方法,只有在我们的情况下,RESTful API才能使资源提供者刷新令牌并将其发送回客户端.我认为这会带来安全风险.所以我们可能只有一种有效的方法.

restful-authentication single-sign-on oauth-2.0 single-page-application

29
推荐指数
1
解决办法
7984
查看次数