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

问题描述 投票:4回答:2

我们有一个基于Identity Server 3.0的安全令牌服务器,该服务器管理跨多个应用程序(单页和本机移动应用程序)的安全性。并且有一个或多个资源服务器(上述应用程序需要访问的RESTful API)。移动应用程序提供了客户端信息的摘要视图,用户需要在其中导航到“单页”应用程序以获取客户端的完整视图。

目前,移动应用程序(Cordova)通过资源所有者客户端凭据授予从资源服务器检索客户端信息摘要,并在Cordova应用程序中以网格形式显示客户端信息列表。

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

现在的问题是如何将我们必须拥有的令牌传递给单页应用程序(AngularJS),而不在URL中发送它(令牌)。可以请一些人阐明解决该情况的最佳方法吗?

oauth-2.0 identityserver4 openid-connect
2个回答
3
投票

您需要的是两个应用程序之间的单点登录(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

这是SSO的工作方式,您可以看到它需要浏览器的参与。我认为这是解决问题的正确方法。

另外,不建议从OAuth / OpenID Connect委托人获取最终用户凭据。如果应用程序具有特权或无法使用浏览器参与(source),则您的客户端流程正常。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.