问题标签 [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.

0 投票
1 回答
2202 浏览

asp.net-web-api - OpenID Connect middleware for SPA + WebAPI

We are in the process of upgrading our SPA (angular) app with a WebAPI back end to authenticate with OpenID Connect through Google. Ideally we would like to use the hybrid flow.

We have gotten to the point where after clicking the Google Sign In button, the browser redirects to google, takes you through the consent screen and sends the response back to our app with code and id token. Most of the scenarios published out there show how you configure an MVC app with notifications that fire when authorization code is returned:

That never fires in our case and I think the reason for that is because the response is sent back to our SPA, not to the server side end point of our app. What would be the next steps here?

  • Do we receive the code on the client and send an ajax request to our web api layer that then exchanges it for an access token? Once we have an access token, how do we communicate that the user is signed in so the tokens are recognized as valid when we make the api calls from js.
  • Do we tell google to send the response to our web api layer, let that exchange the code for an access token and send a redirect response with a hash fragment containing the access token at the end? Would the notification handler fire in that instance?

In either case, can we leverage anything in the OpenID middleware for exchanging the code? The post request doesn't seem terribly complicated, but still it would be nice leverage an existing library for that if possible.

0 投票
4 回答
7611 浏览

oauth-2.0 - OpenID Connect - 如何处理单次注销

我正在研究将 OpenID 连接用作我们的企业应用程序(面向消费者)的 SSO 协议。总的来说,它的大多数方面都符合我们的需求,除了它能够处理单次注销并希望对此提供一些指导。

我有机会查看了最新的 OIDC 会话管理规范,以及涉及类似主题的几个堆栈溢出问题:

正如 ping 的人所说,单次注销的处理方式与 SAML2 不同,因为它更以用户为中心。这一切都很好,但仍然感觉不适合实际单次注销的需求。具体来说,以用户为中心的处理(通过有点笨拙的 iframe 通信)仅适用于当前浏览器视图,但不适用于当前未查看的 RP。
例如,用户使用特定的 OP 登录到 RP A、B 和 C。单次注销只会触发浏览器正在查看的那些 RP 的注销;这将使其他会话挥之不去,这可能是一个安全问题。(如果我对此分析有误,请更正)。

我已经看到了一些在协议之外工作的解决方案(例如父域 cookie,或者可能(??)相同的会话存储),但不幸的是,这些解决方案不符合我的需求。

我想看看我是否错过了有关 OIDC 规范的一些内容,该规范建议使用单一注销协议,涵盖类似于 SAML2 自己的单一注销的用例?(也许是一些直接的 OP-> RP 通信?甚至是客户端“通过 RP 迭代”注销?)。还是我真的要靠自己为它开发专有解决方案?

顺便说一句,我也很好奇 OIDC 委员会是否已经讨论过这个问题(我相信它已经讨论过),以及它是否在要解决的路线图上。

在此先感谢您的帮助!

0 投票
1 回答
1948 浏览

c# - 一小时后身份从不记名令牌中消失

我正在使用带有 Web 应用程序和 Web api 的 Azure AD 开发多租户解决方案。Web 应用使用 OpenIdConnect 检索承载令牌(缓存在 Azure Redis 缓存中),该令牌在 Angular 中用于从 Web api 获取 JSON。用户模拟用于 Web 应用和 Web api(在 Azure AD 应用程序中设置)。

问题:

这可以正常工作大约一个小时,然后身份突然在 web api 端消失。如果我刷新 Web 应用程序,我会看到该页面被重定向到 Microsoft 登录页面,但不需要任何操作,因为用户只是被重定向回 Web 应用程序并且一切正常。据我所见,网络应用程序在失败时使用相同的不记名令牌,在刷新后(相同的过期时间)再次运行时。AuthenticationContext.AcquireTokenSilent 在这两种情况下都有效。

我试图增加很多不同的超时时间,但没有任何帮助。我还禁用了 web api 上的所有不记名令牌身份验证。我不明白为什么身份消失以及为什么它有助于刷新客户端。有任何想法吗?:)

附加信息

这是 RequestContext.Principal.Identity 在登录或刷新后(在 web api 上)大约一小时后的样子:

在此处输入图像描述

这是大约一个小时后,这会导致身份验证失败:

在此处输入图像描述

我尝试过的一些代码更改:

在 web api HttpConfiguration 中:

这将未经身份验证的主体从 WindowsPrincipal 更改为 ClaimsPrincipal,但一个小时后仍然失败。

在网络应用程序 web.config 中:

在 web 应用程序 owin 身份验证过程中,增加了时间跨度并添加了滑动到期。仍然失败:

更新:

充实一些细节:我们有一个混合 MVC Angular Web 应用程序。许多 MVC 菜单项,每个都导致该菜单项的 Angular“单页应用程序”。MVC 用于路由、身份验证和授权。此外,还会检索附加声明并将其附加到当前主体服务器端。菜单项是受 Authorized 和 ClaimsPrincipalPermission 属性保护的 MVC 控制器。由于网页将在 Azure 中运行,我们将默认 sessionProvider 更改为 Microsoft.Web.Redis.RedisSessionStateProvider。只有 MVC 服务器端与这个 redis 会话缓存对话。不记名令牌(不是刷新令牌)通过授权受保护的 MVC 控制器与 Angular 共享,然后存储在浏览器会话存储中(类似于 adal. js 使用本地存储?)Angular 从启用 CORS 的 API 获取 JSON 内容,该 API 位于与 MVC 应用程序不同的域中。API 和 MVC 应用程序也属于两个不同的 Azure AD 应用程序。

0 投票
1 回答
99 浏览

oauth-2.0 - 从多个应用程序中退出

我正在开发一个 OpenID Connect 实现,它将作为多个应用程序的单点登录工作。我知道如何从单个应用程序中注销用户或简单地撤销刷新令牌以进一步更新访问令牌。但是从谷歌的实施来看;当您从 Gmail 中退出时,您会立即从所有其他 Google 应用中退出,例如;YouTube、谷歌+等。

这种行为是如何完成的?

0 投票
3 回答
1831 浏览

java - OAuth 2.0、Open ID 连接和 SAML

我需要为我的客户开发 SSO 服务器。我的用例是,我有两个应用程序,我希望它们没有自己的登录屏幕,并且使用户可以轻松地从应用程序 1 跳转到应用程序 2(应用程序 1 和应用程序 2 拥有自己的资源,并且他们应该仅依赖中央身份验证服务器来对用户进行身份验证和授权)。我正在阅读有关在 java 中创建 SSO 服务器的信息。我开始阅读 oauth 2.0、open ID connect 和 SAML。我读得越多,我就越困惑。

我在一些地方读到 Oauth 2.0 不能用于 SSO,而在一些地方我读到它可以使用。

我对这三个如何工作有所了解。然而,我无法想象这三者之间有何不同。

我将在下面提出我的问题

  1. Oauth 2.0 能否用于 SSO
  2. 对于数据非常敏感的金融公司,哪个更好 b/w Oauth 2.0 、 SAML 和 Open ID 连接。此外,我们还打算拥有原生移动应用程序。这也将使用相同的 SSO 服务器来登录用户。
  3. 是否有任何库可以在 Java 中实现这些中的任何一个。我打算使用 dropwizard 服务器
0 投票
2 回答
10173 浏览

facebook - Facebook 登录和 OpenID 连接

有人可以确认 Facebook 登录 API ( https://developers.facebook.com/docs/facebook-login/v2.2 ) 是否基于 OpenID Connect ( http://openid.net/connect/ ) 规范吗?

0 投票
2 回答
14292 浏览

c# - 如何从 ASP.Net OpenID Connect OWIN 组件中设置声明?

在身份验证管道期间添加新声明时,我对使用新的 ASP.Net OpenID Connect 框架有疑问,如下面的代码所示。我不确定幕后到底发生了多少“魔法”。我认为我的大部分问题都围绕着对 OWIN 身份验证中间件了解不多,而不是 OpenID Connect。

Q1。我应该手动设置HttpContext.Current.UserThread.CurrentPrincipalfromOwinContext.Authentication.User吗?

Q2。我希望能够像以前那样将对象类型添加到声明中System.IdentityModel.Claims.Claim。新System.Security.Claims.Claim类只接受字符串值?

Q3。我是否需要为我的 in使用新的SessionSecurityToken包装器来序列化为 cookie - 我正在使用 但现在确定在维护我在事件期间添加的任何其他声明方面究竟做了什么?ClaimsPrincipalSystem.Security.Claims.CurrentPrincipalapp.UseCookieAuthentication(new CookieAuthenticationOptions());SecurityTokenValidated

0 投票
2 回答
1248 浏览

asp.net - OpenId Connect,让持有者令牌客户端在 MVC 登录后调用 WebApi 的最佳方法?

我希望有人可以就此给我建议。

我一直在关注本教程的修改形式thinktecture 身份服务器入门以尝试使用 OpenId Connect 身份验证设置站点。

我有这个设置:

充当身份服务器的 Asp.NET MVC 项目

作为安全网站的 Asp.NET MVC 项目

上述设置运行良好。当有人试图访问安全网站中具有 [Authorise] 属性的控制器时,他们将被重定向到身份服务器进行登录,然后在成功登录后重定向回安全网站。

我现在想在组合中添加一个 web api。我创建了一个 WebApi 项目,但与教程中使用“服务帐户”将其称为服务器端不同,我想以当前登录用户的身份从受保护的网站将其称为客户端(JQuery)。

我了解我需要在身份验证标头中使用不记名令牌。

我的问题是:如何在客户端获取当前登录用户的不记名令牌,以便设置标头?(用户已经登录。)

非常感谢您的帮助

0 投票
2 回答
3357 浏览

owin - Azure ADAL 刷新 id_token

我们正在开发一个多租户 Web 应用程序。我们的租户将使用 Windows Azure Active Directory 进行身份验证。我们正在使用 OWIN OpenIdConnect 中间件对用户进行身份验证。我们在认证过程后收到的响应有 id_token 和授权码。

我们还想获取刷新令牌,以便在 id_token 过期后获取新令牌。因此,在 AuthorizationCodeReceived 处理程序中,我们使用 ADAL 库中的 AcquireTokenByAuthorizationCode 方法来获取刷新令牌。响应包含 id_token、access_token 和 refresh_token。

然后我们随后使用 referh_token 来获取新的 id_token,但是响应只包含更新的 access_token 而不是更新的 id_token。是否可以刷新 id_token 或者我们只能刷新 access_token?授权码接收处理程序的代码如下所示。

0 投票
1 回答
42 浏览

python - wso2is id_token 包含不允许的换行符

我正在尝试使用 wso2is 服务器 v5.0.0 来使用 OpenId Connect 协议对用户进行身份验证。

访问令牌请求服务器根据规范创建JSON对象后:http: //openid.net/specs/openid-connect-core-1_0.html#TokenResponse

我注意到 id_token 归档无效。它包含换行符:\r\n,此字段中不允许使用,请参阅:https ://datatracker.ietf.org/doc/html/draft-ietf-oauth-json-web-token-31#section- 7.2第 9 页。

当客户端使用 Java 语言时,这不是问题,因为 org.apache.commons.codec.binary.Base64 解码器可以处理这样的令牌。然而,python 解析器更具限制性。

这是 wso2is v5.0.0 中的已知错误吗?是否有针对此问题的补丁或修复程序?

关于马尔辛