使用身份服务器 3.0 和 oAuth 2.0 时如何跨多个应用程序(Web/移动)共享 JWT 令牌

Ase*_*ena 7 oauth-2.0 openid-connect identityserver4

我们有一个基于 Identity Server 3.0 构建的安全令牌服务器,它管理跨多个应用程序的安全性,包括单页应用程序和本机移动应用程序。还有资源服务器(需要由上述应用程序访问的 RESTful API)。移动应用程序提供客户端信息的汇总视图,用户需要导航到单页应用程序以获取客户端的完整视图。

目前,移动应用(Cordova)通过Resource Owner Client Credential Grant从资源服务器获取客户端信息汇总,并在Cordova App中以网格的形式显示客户端信息列表。

现在的需求是在单页应用程序(AngularJS)中打开客户端详细信息(Details View),而无需用户再次登录。此时,移动应用程序拥有可以访问资源服务器(范围)的令牌。

现在的问题是如何将我们拥有的令牌传递给单页应用程序(AngularJS)而不在 URL 中发送它(令牌)。能否请一些人阐明处理这种情况的最佳方法是什么?

Bor*_*try 5

确保您的所有平台共享相同的“秘密”


Kav*_*uwa 4

您需要的是两个应用程序之间的单点登录 (SSO) 行为。但您当前使用的流程存在问题。

由于您当前正在使用Resource Owner Client Credential Grant,因此您没有使用身份服务器的最终用户登录。相反,我相信您从移动应用程序获取最终用户凭据并调用令牌端点来获取令牌。

从 OAuth/OpenID Connect 的角度来看,SSO 是在浏览器 cookie 之上实现的。怎么运行的 ?

1. App A follow a flow that utilize front channel login (ex:-
Authorization code flow with PKCE)
2. End user is present with login page of Identity Server
3. App A completes the flow and obtain tokens
4. App B use a flow utilize front channel login
4. Identity server get login request and see cookies which correlate previously logged in user
5. Because of cookies, log in page is skipped and optionally consent page will be  showed
6. App B completes the flow and obtain tokens
Run Code Online (Sandbox Code Playgroud)

这就是 SSO 的工作原理,正如您所看到的,它需要浏览器的参与。我认为这是解决问题的正确方法。

此外,从 OAuth/OpenID Connect 主体来看,不鼓励客户端获取最终用户凭据。如果应用程序具有特权或无法使用浏览器参与,则您的客户端流程没问题(来源)。