标签: google-openid

OpenID,OpenID2,Open Connect的未来是什么?是否值得实施提供商?

我看到OpenID登录在任何地方都可用,并决定我应该考虑在我的服务器上实现我自己的提供程序,以便我可以控制我的信息和登录.

令人惊讶的是,这非常复杂和困难.

即使许多站点允许OpenID登录(例如这个),我发现了以下问题:

  1. 许多简单的"自己动手"的单一身份OpenID提供商解决方案现在都是蒸发器.
  2. OpenID存在相当严重的持续安全问题:

http://en.wikipedia.org/wiki/OpenID#Security

  1. 许多OpenID提供商似乎已经消失(MyOpenID.com,getopenid.com等).
  2. 该协议似乎不断变化,以前的版本被删除(可能是由于安全问题?)

例如,从2013年8月开始,关于使用Google Plus/Profiles作为代表的SO的解决方案现在得到了Google的错误,称今年4月将从Google移除OpenID 2.0支持并替换为OpenID Connect:

将OpenID委托给Google(不是Google Apps)

有人甚至提供简单的OpenID Connect 单一身份提供商吗?查看OpenID的OpenID提供程序软件列表根本没有提到任何OpenID Connect解决方案,更不用说该页面在4年内没有更新!

http://wiki.openid.net/w/page/12995226/Run%20your%20own%20identity%20server

仔细查看所有这些信息,我很高兴我几年前搁置了我的计划,在我的服务器上实现OpenID 2.0,因为它看起来已经过时了,我想不出一个简单的方法来证明我的身份.令人惊讶的是,我不能只安装一个软件包并编辑配置文件.大多数更简单的实现涉及安装和使用PHP,它有自己需要了解的安全问题.

那么 - 任何一个OpenID专家和它的目标谁能给我一些关于如何设置我的身份提供者或者是否值得困难的建议?我希望控制我的信息和分发我的电子邮件地址以及拥有永久性身份,但如果标准不断变化那么它就不是永久性的.

openid google-openid openid-provider openid-connect

16
推荐指数
2
解决办法
1457
查看次数

OpenID:标识符URL是唯一的吗?标识符之间有什么区别

OpenID规范中,它说:

  • 标识符:

标识符只是一个URL.OpenID身份验证协议的整个流程是关于证明最终用户拥有URL.

  • 声称的标识符:

尽管消费者尚未验证最终用户所拥有的标识符.

  • 已验证的标识符:

最终用户向其所拥有的消费者证明的标识符.

  • 身份提供者:

也称为"IdP"或"服务器".这是消费者联系的OpenID身份验证服务器,用于最终用户拥有声明的标识符的加密证明.最终用户如何向其身份提供商进行身份验证超出了OpenID Authenticait的范围.

  • 标识符URL是唯一的吗?究竟是什么?

  • 如果它不是唯一的,那么是否有任何唯一的消费者可以在同一个OpenID端点URL上的不同用户之间有所不同?

  • IdP和标识符URL之间有什么区别?

在其他地方,我读过"OpenID端点URL"这个术语.

  • OpenID端点URL是否与IdP相同?那么IdP也是一个URL?

我们以Googles OpenID为例.当某个站点要求我进行OpenID登录时,我使用OpenID URL https://www.google.com/accounts/o8/id.那是标识符URL吗?如果是这样,那显然不是唯一的.通常,当我在该网站上的帐户设置中查看我的OpenID登录信息时,它不会显示输入的网址,但它已经以某种方式扩展了它https://www.google.com/accounts/o8/id?id=AltOawk....该URL现在看起来很独特.

  • 现在的目的是https://www.google.com/accounts/o8/id什么?那是OpenID端点URL吗?或者是IdP URL(如果这是不同的)?

  • 那目的是https://www.google.com/accounts/o8/id?id=AltOawk...什么?这真的很独特,对我的 Google帐户来说也一样吗?这个URL是什么标识我?

  • 为什么他们没有使用https://www.google.com/accounts/o8/id?u={google-username}而不是这个神秘的...?id=AltOawk...

  • 如果是Google,标识符的网址是多少?

  • 什么是OpenID端点URL?(什么是IdP URL?)

我问的原因是因为我正在尝试实现自己的OpenID端点.

  • OpenID端点URL是否与标识符URL相同?

在我的OpenID端点实现中,我确实存在这个问题,它在不同用户之间无法区分.消费者网站只是将该OpenID端点上的所有用户都视为相同.当然,它始终是相同的OpenID URL,但Googles OpenID也是如此.

  • 如果最终用户使用此"常规"URL,如何在OpenID端点实现中将其重定向/转发到"具体"/唯一(标识符?)URL?或者,如何区分同一OpenID URL上的不同最终用户?

在我当前的实现中,当我启用一些调试跟踪时,我得到的第一个请求是模式checkid_setup.在规范中,它说我在这里得到了声称的标识符.由于我在消费者网站上输入的内容(我的调试跟踪说的相同),这就是"常规"URL(OpenID端点URL).即,这不是唯一的URL.

  • 我现在必须做重定向吗?规格没有说明任何事情.我在哪里告诉"具体"网址?(在我的例子中,就是URL http://{endpoint-url}?u={endpoint-username}.)

还有术语"OpenID服务器"(URL)和"OpenID委托"(URL).

  • 这些条款如何与上述其他条款相关?与OpenID端点URL完全相同?

  • 什么是"OpenID身份"?与OpenID标识符URL相同?


另请参阅相关问题:OpenID在同一OpenID端点上的不同登录之间有何不同?

(元问题:我是否应该在很多独立的SO问题中将其分开?我担心否则我可能无法得到所有问题的答案.)

openid google-openid

15
推荐指数
1
解决办法
3106
查看次数

用于网站的基本Google登录代码无法在Internet Explorer 11中使用

我正在尝试使用Google登录网站(https://developers.google.com/identity/sign-in/web/)并注意到我的解决方案无法在Internet Explorer 11中使用.要尝试消除尽可能多的内容尽可能的因素,我根据Google提供的示例代码创建了一个简单的测试用例.

我已经在我的Windows 7 PC上的Chrome,Mac上的Chrome,Mac上的Safari,Mac上的Firefox和iPhone上的Safari上测试了它.它适用于所有这些(例如,当我点击登录按钮并选择/输入我的Google帐户时,它返回到页面,按钮显示,"登录").

但是,它不适用于PC上的Internet Explorer 11,或者奇怪的是,适用于iOS的Chrome.单击该按钮后,将打开一个窗口以允许我选择我的Google帐户,但在进行选择后,窗口将关闭并返回到页面,其中仍有一个按钮仍然显示"登录".

以下是示例代码:

<html>
<head>
<meta name="google-signin-client_id" content="61023618497-vqfbod57f26ncjl9d6firk3t09ve4tt3.apps.googleusercontent.com">
<script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
<div class="g-signin2"></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

关于可能发生的事情的任何想法?我已经四处寻找并且没有找到任何解决方案.

一个想法是将"accounts.google.com"添加到IE的可信站点.这没用.我也尝试通过https而不是http来访问该页面.这也没有什么不同.还有什么我应该尝试的吗?

javascript internet-explorer google-openid google-oauth google-signin

15
推荐指数
1
解决办法
3746
查看次数

如何使用正确的Google OpenID网址登录我的网站?

我想实现的OpenID作为一个优先选择我的下一个Web应用程序在这里

代码来自本教程,如果我使用myopenid.com的openID,则可以使用

不过,我相信大多数人会很喜欢使用他们的日常电子邮件地址作为其OpenID,因为据我所知,谷歌,雅虎和其他一些大牌球员都已经在他们的系统做到了这一点.

我的问题是:如何在登录表单中找到正确的"网址"?我将我的Google OpenID帐户用于StackOverflow,它运行得很好.我尝试像这样复制我的openID:

www.google.com/accounts/o8/id?id=aitoawllano10bzdzp3ht0diffry0qt6_j2ls-m
Run Code Online (Sandbox Code Playgroud)

并将其直接粘贴到我的表单中,但它不起作用.

我也尝试删除url参数,但这也不行.

非常感谢您提供任何提示和建议.

openid google-openid

14
推荐指数
1
解决办法
8441
查看次数

Spring Security和Google OpenID Connect迁移

问题:

1)将OpenID Connect身份验证集成到使用Spring Security进行身份验证的Web应用程序中的最佳方法是什么?

2)有没有办法 - 从MITREid方面或Google账户方面 - 让MITREid OpenID Connect身份验证过滤器与Google的OpenID Connect服务一起使用?

我确信这些问题的答案对于使用Spring Security OpenID模块向Google进行身份验证的任何开发人员都很有用.

详情:

我的webapp使用Spring Security的OpenID模块(<openid-login .../>)进行身份验证,将Google帐户作为身份提供商.即,用户使用他们的Google Apps或GMail电子邮件地址进行身份验证.

最近,每当用户进行身份验证时,他们都会从Google帐户收到此警告消息:

重要提示:Google帐户的OpenID2将于2015年4月20日消失.

因此,谷歌正在放弃对OpenID的支持,将于2015年4月完全关闭,并声明如果您想通过Google帐户进行身份验证,则必须切换到OpenID Connect协议.

我希望Spring Security能够内置对OpenID Connect的支持,就像它内置了对OpenID的支持一样.例如像<openid-connect-login .../>元素一样的东西.但我的搜索结果却没有得到这样的支持.

我到目前为止找到的最佳候选人是MITREid Connect.它包括一个以OIDCAuthenticationFilterOpenID Connect 命名的Spring Security身份验证过滤器.问题是,它无法与Google的OpenID Connect实施互操作.

我尝试克隆MITREid simple-web-app并将其配置为使用Google帐户进行身份验证(使用OpenID Connect).但它没有用,因为它取决于Google的OpenID Connect实现不支持的随机数.来自Google帐户的错误消息是:

此消息类型不允许使用参数:nonce

接下来,我尝试将自己的MITREid AuthRequestUrlBuilder接口实现插入到MITREid配置中.我的实现和MITREid的实现之间的唯一区别是,我并没有发送随机数.

不发送nonce使得Google的OpenID Connect实现感到满意,但MITREid在Google身份验证响应中找不到nonce时抛出异常.错误消息是:

身份验证失败:ID令牌不包含nonce声明

我在MITREID'中跟踪了MITREid异常到这些行OIDCAuthenticationFilter:

// compare the nonce to our stored claim
String nonce = idClaims.getStringClaim("nonce");
if (Strings.isNullOrEmpty(nonce)) {

    logger.error("ID token did not contain …
Run Code Online (Sandbox Code Playgroud)

spring-security google-openid google-oauth openid-connect

14
推荐指数
1
解决办法
5661
查看次数

Google"OpenID Connect"与"Google登录"之间的区别?

我希望用户访问我的网站,使用Google帐户进行身份验证/登录我的网站.用户的主要用例是编辑和生成内容,我们希望以安全的方式记录所有权.我们对获取用户Google数据不感兴趣,我们只想要一种方法来验证用户身份.

谷歌搜索后,我遇到了一些文档,似乎解释了如何做这个OpenID Connect(登录OAuth 2.0).但文档立即说"注意:如果您想为您的网站或应用提供"登录Google"按钮,我们建议您使用Google+登录,...",如果您按照链接最终将带您到Google+登录.

这两页文档有什么区别?为什么第一个告诉你去第二个而不说第一个被弃用?两者都适合我的用例吗?它只是说"我们推荐" 我想知道为什么,他们为什么推荐它

更新:我还发现了另一个链接,似乎记录了另一种方法https://developers.google.com/accounts/docs/OAuth2WebServer我认为这只是为了"授权",即授权你的应用程序进行谷歌API呼叫获取用户数据,因此不能用于身份验证/登录.

顺便说一句,我正在使用Scala Spray BE REST API和NG JS FE构建我的网站.

openid authentication google-openid oauth-2.0 google-oauth

14
推荐指数
1
解决办法
5583
查看次数

是否可以通过Google的id_token获取个人资料信息?

当使用谷歌的OpenIDConnect认证系统,它可以指定emailprofile或两者的scope参数.如果您请求email范围,则"email"和"email_verified"声明将包含在id_token作为成功OAuth2身份验证会话的一部分返回的声明中.

以下是Google文档中的示例:

ID令牌的有效负载

ID令牌是包含一组名称/值对的JSON对象.这是一个示例,格式化为可读性:

{"iss":"accounts.google.com", 
 "at_hash":"HK6E_P6Dh8Y93mRNtsDB1Q", 
 "email_verified":"true",
 "sub":"10769150350006150715113082367", 
 "azp":"1234987819200.apps.googleusercontent.com", 
 "email":"jsmith@example.com", 
 "aud":"1234987819200.apps.googleusercontent.com", 
 "iat":1353601026, 
 "exp":1353604926,
 "hd":"example.com" 
}
Run Code Online (Sandbox Code Playgroud)

但是,请求profile范围似乎对id_token的内容没有任何影响.为了检索配置文件信息,您必须向不同的端点发出单独的HTTP请求(使用您刚刚收到的access_token进行身份验证)以获取看起来非常相似但具有更多信息的文档:

{
  "kind": "plus#personOpenIdConnect",
  "gender": string,
  "sub": string,
  "name": string,
  "given_name": string,
  "family_name": string,
  "profile": string,
  "picture": string,
  "email": string,
  "email_verified": "true",
  "locale": string,
  "hd": string
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,我更愿意获取nameid_token JWT中包含的配置文件信息(只是,实际上),而不是必须单独调用.有没有办法指定其他字段并将它们作为声明包含在id_token中?如果没有,为什么要email特别处理并返回id_token?

google-openid oauth-2.0 openid-connect google-oauth2

14
推荐指数
2
解决办法
4778
查看次数

是否可以使用Chrome App Indentity Api获取Id令牌?

我不能得到用户的id_token(https://developers.google.com/accounts/docs/CrossClientAuth从Chrome身份API()https://developer.chrome.com/apps/identity).

当清单中的oauth部分为:时,我可以使用chrome身份示例获取access_token:

"oauth2": {
  "client_id": "<chrome-app-client-id>.apps.googleusercontent.com",
  "scopes": ["https://www.googleapis.com/auth/plus.login"]
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试以同样的方式获取id_token时,我在我的Android客户端上获取它得到错误:

"OAuth2请求失败:服务响应错误:'无效范围:{0}'"}

清单部分现在是:

"oauth2": {
  "client_id": "<chrome-app-client-id>.apps.googleusercontent.com",
  "scopes": ["audience:server:client_id:<app-engine-client-id>.apps.googleusercontent.com"]
}
Run Code Online (Sandbox Code Playgroud)

在Android上,我通过将相同的范围字符串传递给android.gms.auth.GoogleAuthUtil.getToken()来获取id_token,但我无法使用chrome身份api.

是否可以通过Chrome App Indentity Api获得id_token?如果没有,我如何获得Chrome应用的id_token?

谢谢你的帮助!

token google-openid google-chrome-extension oauth-2.0 google-chrome-app

12
推荐指数
2
解决办法
3552
查看次数

尝试在 google oauth 中为同意屏幕注册应用程序时出现问题

我正在尝试为 Oauth 同意屏幕注册我的应用程序,以便我可以创建 OAuth 客户端 ID。即使我已正确提交所有内容,我仍然在表单末尾收到此验证错误。

保存您的应用程序时出错

并且此错误未说明表单中的哪个输入无效。同样在开发工具窗口的网络选项卡中,每次我提交请求时,我都可以看到正在发起 POST 请求,但失败并显示以下错误。

{"error":{"code":3,"message":"The request failed because one of the field of the resource is invalid.","details":[{"@type":"type.googleapis.com/google.rpc.PreconditionFailure","violations":[{"type":"client_auth_config","subject":"?error_code=9&error_field_name=UpdateBrandWithMaskRequest.brand_id&error_field_value=0"}]}]}}.

非常感谢有关如何解决此问题的任何建议。我也就这个问题联系了谷歌支持,但截至目前,他们说一切正常,清除缓存和 cookie,但它不起作用。我在此处附上了我正在使用的同意配置向导的捕获。

我在此处附上了我正在使用的同意配置向导的捕获。

google-openid google-oauth google-cloud-platform

12
推荐指数
4
解决办法
5519
查看次数

您无法从此屏幕登录,因为此应用不符合 Google 的嵌入式 webview 政策

我正在一个电子商务网站上工作。我们的网站提供使用 google 帐户(使用 OAuth)注册的选项。

我们的网站是响应式的,可以使用移动设备访问,但它不是嵌入式的,我们没有任何 Andriod 或 iOS 应用程序。

今天,我从我们的一位用户那里收到以下错误。这就是我得到的全部信息,但听起来她正在尝试注册我们的网站,这时她收到以下错误:

您无法从此屏幕登录,因为此应用不符合 Google 的嵌入式 webview 政策。如果此应用有网站,您可以打开网络浏览器并尝试从那里登录。

在此输入图像描述

我查过这个谷歌页面,上面写着:

Google Identity 团队不断致力于提高 Google 帐户的安全性,并为我们的用户创造更安全的体验。作为这项工作的一部分,我们最近引入了一项新的安全浏览器策略,禁止在嵌入式浏览器库(通常称为嵌入式 Web 视图)中发出 Google OAuth 请求。自 2021 年 9 月 30 日起,所有嵌入式 Web 视图都将被屏蔽。

这很奇怪,因为今天是9 月 29 日!不完全确定此错误是否是由于 Google 对 OAuth 的更改所致?不确定如何解决这个问题?

oauth webview google-openid oauth-2.0 google-oauth

12
推荐指数
1
解决办法
3万
查看次数