问题标签 [openid-connect]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
oauth-2.0 - 处理 OpenID 的安全风险 在移动客户端和服务器之间连接 id_token 和 access_token(谷歌登录)
我正在考虑允许用户使用 Google 登录我的移动应用程序。如果用户已经在他们的设备上登录了 Google,我不希望他们必须重新输入他们的用户名和密码(“原生登录体验”)。用户登录后,他们可以访问我服务器上的私有资源。为此,我使用了 OpenID Connect隐式流。这就是我对流程的理解:
用户正在使用我的移动客户端应用程序(ios 或 android)并选择使用 Google 登录。
我的客户端应用程序(使用 Google 的 ios 或 android SDK)获取access_token和id_token(假设用户已安装 Google+ 应用程序,已登录并已授予我的应用程序的权限)。
我的客户端应用程序将 access_token 和/或 id_token 发送到我的服务器。
我的服务器验证 access_token和/或验证 id_token
使用任一令牌,我的服务器将 google 用户映射到我自己的数据库中的用户。
我的服务器创建自己的新安全令牌并将其返回给我的客户端应用程序。
我的客户端应用程序在对我的服务器的后续请求中使用新的安全令牌来访问私有资源。
问题:
如果我想为用户提供“本机登录体验”,这是用于登录的正确流程吗?
假设我遵循所有谷歌指南(例如使用 SSL、在标头或 POST 数据中发送令牌、正确验证令牌)......
从客户端发送 access_token 存在哪些漏洞?
从客户端发送 id_token 存在哪些漏洞?
此流程还有哪些其他安全风险?
这似乎是一个非常常见的用例。这是大多数应用程序为实现 Google 的“本地身份验证”所做的事情吗?应用程序示例将不胜感激。
提前致谢。
rest - 发现 OpenID Connect 提供者发行者
在 OpenID Connect Discovery 1.0 规范中,使用电子邮件地址语法的用户输入部分 他们有这个例子:
我试过了
我也试过
在少数之中。但我得到的只是404 Not Found
。
也许我做错了什么,或者互联网上可能没有地方可以实际返回200 OK
上面示例中显示的内容。
我的问题是,给定一个 OpenID(我的意思是用户在这里输入的内容
),如何确定 OpenID Provider Issuer 在哪里?换句话说,如果我想允许通过OpenId Connect登录,我是否必须保留自己的从 OpenID 模式到 OpenID 颁发者的映射?
security - OpenID Connect 与无状态 JWT 令牌
我想将自托管 OpenID Connect (OIDC) 服务器与 JWT 结合使用作为授权令牌(OIDC 术语中的访问令牌)。JWT 将用于保护 REST 服务,而 UI 是经典应用程序和单页应用程序 (Angular) 的混合体。这样,REST 层将能够基于无状态 JWT 令牌进行授权,因此不需要额外的数据库连接,如下所述:
https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/
对于单页应用,OIDC 隐式流是合适的。但是,当隐式流与无状态 JWT 令牌结合使用时,我发现了一个安全问题:令牌作为 URL 中的片段部分提供,这意味着无法删除它们(它们在浏览器历史记录中很容易获得)也不会失效它们(它们是无状态的)-> 无法注销。
我看到 2 个选项可以缓解这种情况:
- 使用非常短暂的令牌(最多几分钟)。这可能会极大地阻碍可用性。
- 通过 AJAX 使用授权码流。这不符合 OIDC,但会使注销成为可能,因为令牌不会在 URL 中公开。
第三种选择是放弃无状态 JWT 令牌并使用简单的不记名令牌和数据库检查。
我错过了什么吗?你会选择什么?
spring-security - 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 日停用。
因此,Google 将放弃对 OpenID 的支持,并将在 2015 年 4 月将其完全关闭,并声明如果您想使用 Google 帐户进行身份验证,则必须切换到 OpenID Connect 协议。
我希望 Spring Security 能够内置对 OpenID Connect 的支持,就像它内置对 OpenID 的支持一样。例如<openid-connect-login .../>
元素之类的东西。但我的搜索没有出现这样的支持。
到目前为止,我发现的最好的候选人是 MITREid Connect 。它包括一个名为OIDCAuthenticationFilter
OpenID Connect 的 Spring Security 身份验证过滤器。问题是,它不能与 Google 的 OpenID Connect 实现互操作。
我尝试克隆 MITREid simple-web-app 并将其配置为使用 Google 帐户进行身份验证(使用 OpenID Connect)。但它不起作用,因为它依赖于Google 的 OpenID Connect 实现不支持的随机数。来自 Google 帐户的错误消息是:
此消息类型不允许使用参数:nonce
接下来我尝试将我自己的 MITREidAuthRequestUrlBuilder
接口实现插入到 MITREid 配置中。我的实现和 MITREid 的实现之间的唯一区别是我没有发送随机数。
不发送 nonce 让 Google 的 OpenID Connect 实现很开心,但 MITREid 在 Google 身份验证响应中找不到 nonce 时抛出了异常。错误消息是:
身份验证失败:ID 令牌不包含 nonce 声明
我将 MITREid 异常跟踪到 MITREID'S 中的这些行OIDCAuthenticationFilter
:
但是我没有办法扩展 MITREid 的实现来忽略随机数。如此接近,却又如此遥远!如果 Google 帐户接受 nonce 或 MITREid 可以配置为忽略 nonce,那么我们就有了解决方案。
在 github 上的 MITREid Connect 问题列表中,我发现其他人也遇到了这些类似的问题:
1) #726 - 关于将客户端与 Google 一起用作身份验证提供程序的文档
2) #704 - 在 ServerConfiguration 中添加一个 useNonce 属性,以指示 IdP 是否在其请求中接受 nonce 值。
所以我被困住了。到 2015 年 4 月,Google 将关闭 Open ID 身份验证。
一些相关链接:
1)https://support.google.com/accounts/answer/6135882
2)https://www.tbray.org/ongoing/When/201x/2014/03/01/OpenID-Connect
3)https://github.com/mitreid-connect
4) https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/blob/master/openid-connect-client/src/main/java/org/mitre/openid/connect/client/OIDCAuthenticationFilter.java
5)https://github.com/mitreid-connect/simple-web-app
6)https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/blob/master/openid-connect-client/src/main/java/org/mitre/openid/connect/client/service/impl/PlainAuthRequestUrlBuilder.java
7)https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/issues/726
8)https://github.com/mitreid-connect/OpenID-Connect-Java-Spring-Server/pull/704
2015-02-18 更新
最近在 mitreid-connect 的开发分支中添加了用于禁用 nonce 的功能 - 因此使 Google 的 OIDC 服务器很高兴。值得庆幸的是,mitreid-connect 还提供了一些与 Google 互操作的指导。不幸的是,“nonceEnabled”更改在 Maven 中心尚不可用,但希望很快就会改变。
google-openid - Google OpenID Connect 一致性
我正在尝试使用oic库通过 Google OpenID Connect 进行身份验证,但出现错误
跑步时
它尝试访问https://accounts.google.com/.well-known/openid-configuration,它说
现在,规范似乎表明这是不正确的:
发行人:必填。使用 https 方案的 URL,没有查询或片段组件
我是否正确解释了这是 Google 的 OpenID 连接配置中的错误的情况?我应该向哪里报告此错误?
(注意:我不是在寻找解决方法,这很容易:我可以跳过提供者配置发现并对发现的信息进行硬编码。但我想支持任意 OpenID Connect 提供者,而不仅仅是谷歌)
google-oauth - Google OAuth2 API JWS 一致性
Google 目前在https://www.googleapis.com/oauth2/v2/certs公开了以下证书值
我正在尝试使用oic和jwkest访问 Google API ,并得到错误
出现问题是因为n
两个键的参数都以=
字符结尾。IIUC,它们应该是根据JSON Web Algorighms Draft 编码的 Base64URL,并且根据 JSON Web Signature draft , Base64URL 会去除=
字符。
这是我正在使用的 Python 库中的错误,还是 Google 确实不符合规范?如果是后者:我在哪里可以报告?
openid - 是否可以通过 salesforce.com 进行 OpenID Connect 动态注册?
我的团队正在构建一个框架,开发人员将使用它来制作他们的应用程序 OpenID Connect 依赖方。我们要支持的第一个提供商是 Salesforce。SFDC 有一个页面供用户将其应用程序注册为依赖方,但我们希望使用OpenID Connect 动态注册过程以编程方式进行此操作。
我一直找不到 SFDC 的注册端点。他们的发现端点不返回一个。是否可以向 salesforce.com 动态注册 OpenID Connect 依赖方?如果是这样,URL 是什么,它记录在哪里?谢谢。
forms-authentication - Owin 挑战触发 DNN 的第二个意图
我为 DNN 创建了一个具有混合身份验证的自定义登录模块:1)通过 ADFS 进行身份验证。2) 使用常规表单身份验证进行身份验证。一切正常,除了:
第一次单击会重新加载页面,并且第二次总是有效。我试图禁用像这篇文章建议的表单身份验证,但因为我正在使用 DNN,所以我不能这样做。
我还测试了在 Page_Load 上触发事件并正常工作,但我想让 DNN 本地用户能够直接登录到 DNN(主机用户)......所以我也不能在那里进行挑战。
关于我应该怎么做才能使挑战在第一次点击时起作用的任何帮助?
提前致谢。
openid-connect - oauth 使用 G+ 社区组
我想知道是否可以专门为给定的 Google 社区使用 OpenID 连接。
因此,该网站将只允许来自给定 Google+ 社区的人登录,而不是任何拥有 gmail 帐户的人。
我看到的好处是,用户管理可以从 G+ 社区完成。
google-oauth - 谷歌 OpenIdConnect 人
我为少数 OAuth2-OpenIdConnect 提供者实现了 OpenIDConnect 身份验证/配置/联合的客户端。但我无法让 Google OpenID People https://developers.google.com/+/api/openidconnect/getOpenIdConnect工作。
我对 OpenID 身份验证/授权的第一部分没有任何问题,并且可以毫无问题地从 JSONWEBtoken 获取身份令牌。尽管如此,我还是无法访问 $identityApiUrl。奇怪的是,旧的 google 的 userinfo API 可以工作!!!只有新的失败并出现授权错误。
对于 PeopleAPI,我使用了重用 access_token 的承载令牌,我得到了我的授权请求。就像我对旧 API 所做的一样。
在使用我使用的 URL 和范围以及错误从我的代码中进行简短提取之后,我在使用 curl 手动重播请求时得到了。
问题:
- OpenIdConnect People API 是否有特殊的身份验证方法?
- 我需要在应用程序控制台中请求特殊授权吗?
使用 API 的 URL 从代码中提取
使用 curl 重播请求时的错误代码