asp.net 具有Oauth 2作用域的Identity Server 4

czq61nw1  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(137)

我实现了身份服务器4和客户端Angular 的一切工作作为例外,我确定了客户端的范围(openid,配置文件,电子邮件),但当尝试从服务器和Angular 显示错误的范围数组中删除openid请求


的数据
但当删除配置文件或电子邮件工作正常,为什么当删除openid显示此错误?
第二个问题,当从范围客户端删除配置文件时,为什么仍然在令牌中显示用户信息?
提示我正在使用隐式授权流


tct7dpnv

tct7dpnv1#

当你使用一个“用户存在”的oauth2流,如“代码流”,“隐式授权”或“资源所有者密码”,那么openid作用域是强制性的。
这是因为这个作用域是将主题sub声明添加到access_token和user-info的作用域。
在oauth的上下文中,Subject等同于userid。没有它,就无法识别登录的用户/主体,只能通过客户端(通过client_id)。
因此,对于机器到机器的场景(如client_credentials流),openid作用域是无效的,但在“用户在场”的场景中,它是强制性的。

更新

在请求访问时,有两件事需要配置:什么信息(声明)将被烘焙到access_token中,以及什么信息将通过对/connect/user-info端点的普通http调用对客户端可用。

  1. access_token中的信息是供服务器端(API和服务)检查的
    1.而通过user-info端点检索的信息是为您的angular客户端提供的。
    如果您正在重新配置access_token以从内部找出配置文件信息,则省略emailprofile等可选作用域不会改变它们。另一方面,如果您使用“较低”特权令牌调用/connect/user-info端点,您将看到响应中的信息发生变化。
    用postman试试吧。这一切都归结于你的angular客户端在隐式授权流完成后做了什么。它如何实现用户配置文件以显示它(它应该使用user-info端点IMHO)。

相关问题