我们要构建一个主要的React App,该App在登录后显示许多应用程序(用户通过身份验证后可以访问的应用程序列表)。当用户单击其中一个应用程序时,来自主应用程序的令牌将发送到另一个应用程序。
第二个应用程序如何知道令牌有效? 应用程序必须位于同一域中才能正常工作吗? 另外,每个应用都有自己的授权(即用户可以在每个应用中执行的操作),令牌中是否包含所有这些信息,或者我们可以使用相同的令牌为每个应用获取后者?
很抱歉有很多问题。
我是身份服务器和openID连接的新手,所以任何指针都很棒。
谢谢
答案 0 :(得分:1)
首先,您不应在应用之间传递令牌。您所有的应用程序都应该是单独的client
,但它们具有的共同之处是它们将用于检索令牌的相同中央授权URL(您的身份服务器)。从用户的角度来看,这一切都是无缝的,因为使用cookie身份验证在中央机构上实现了单点登录-一旦用户登录到您的主应用程序,每当其他应用程序重定向用户以获取令牌时,它们都会绕过登录页面由于使用了Cookie身份验证,因此可以直接进入同意页面(也可以通过将客户端属性RequireConsent
设置为false来跳过同意页面,这通常是在第一方应用中完成的)。
要回答您的一些问题:
第二个应用程序如何知道令牌有效?
如果您不在应用程序之间传递令牌,这并不是真正需要的,但是从技术上讲,它可以通过其签名或使用自省端点来验证令牌。
应用程序必须位于同一域中才能工作吗?
他们不必在同一域中。
令牌将包含所有这些信息,还是我们可以获取后者 每个使用相同令牌的应用程序?
令牌包含的声明在很大程度上基于客户端请求的范围(至少默认情况下)得到控制。因此,如果每个应用程序都请求自己的令牌,那么它就必须请求它感兴趣的所有范围。由于Identity Server 4的灵活灵活性,很多这种行为可以被覆盖和扩展,因此几乎总是可以找到一种方法来完成所需的工作。