需要OAuth2范围说明

时间:2016-05-18 15:53:24

标签: single-sign-on identityserver3 oauth2

我使用的是IdentityServer3,但我不确定它是一个问题还是OAuth2,或者只是我对它的理解。

tl:dr

How do I allow my user to have different claims in each app using single-sign-on?

这是一个场景:

我想在一套应用程序中安排单点登录,因此我有一个身份服务器(让我们称之为IdSvr)和几个客户端应用程序(我们称之为AppA和AppB)。

AppA需要知道用户的个人资料信息,电子邮件信息和一些AppA特定数据。 AppB需要知道用户的个人资料信息,电子邮件信息和一些AppB特定数据。为了支持这一点,我在IdSvr中设置了范围,详细说明了特定于应用程序的声明:范围" ScopeA"涵盖索赔" A01"," A02"等,范围" ScopeB"涵盖索赔" B52"," B53"等

现在,当AppA需要对我的用户进行身份验证时,它向IdSvr发出请求,要求提供" openid个人资料电子邮件ScopeA"并获取一个获得所需声明的令牌,包括" A01"," A02"等。

当我的用户访问AppB时,它会发现他已经过身份验证,因此只需获取已获得的声明。没有" B01"," B02"等,因为当AppA开始认证时,它没有要求ScopeB。

在这种情况下,为了获得ScopeB声明,我需要签署用户并请求包括ScopeB在内的全新身份验证。

如果我的用户回到AppA,他的ScopeA声明已经丢失,即使他仍然经过身份验证。

我期望范围功能让我将声明分开,以便AppB特定声明不会干扰AppA使用,反之亦然。我还期望AppB能够提出自己的请求,如果现有的身份验证不包含它,则要求ScopeB。

我误解了吗?我是否应该让初始身份验证获得一个令牌,该令牌可以访问所有用户的声明,并让每个消费者应用程序负责过滤掉它不需要或不应该知道的内容。 ?范围的重点是什么?

1 个答案:

答案 0 :(得分:0)

身份服务器存储一个cookie,以便在将来的请求中对您进行身份验证。您可以直接进入同意屏幕(如果需要同意),而不是登录屏幕,然后根据范围/客户端生成您的声明和令牌。您无需注销即可获取AppB的新令牌。

当IdentityServer重定向回客户端时,会通过查询字符串传递令牌。如何存储该令牌完全取决于您。

缓存令牌的一些明显选择是cookie或本地存储。但是,如果两个应用程序位于同一个域中并且您使用相同的密钥来缓存/检索令牌,那么您将撤回AppA缓存的令牌,或者当您获得AppB令牌时,它可能会覆盖AppA令牌。