这是我们今天面临的一个问题。在决定在这里提问之前,我尽可能多地在线查看。
问题是,当用户使用用户名/密码进行“访问令牌请求”时,访问令牌响应是否应包含“user-id”字段?
OAuth 2.0 spec表示可以有一个额外的字段(在规范中搜索“example_parameter”)作为访问令牌响应的一部分。这个额外字段可以是用户ID吗?
然而,许多像facebook / google / twitter这样的公司都没有提供用户ID作为访问令牌响应的一部分。 User-id作为验证令牌响应的一部分提供。
不提供用户ID作为访问令牌响应的一部分的原因是什么?如果我们需要用户ID,为什么还要再打一次电话(额外往返)呢?将用户标识作为访问令牌响应的一部分提供的后果是什么?
答案 0 :(得分:0)
大多数应用程序都不想将用户ID泄漏到UI层。这通常被认为是不好的做法。如果您将用户ID发送到UI层,UI将能够请求有关该UserId的信息,并获取有关它的信息...
这提出了一个安全问题,因为客户端通常可以修改这些调用以获取有关其他UserID的信息...如果您要每次验证每个调用以验证令牌是否绑定到该用户ID,那么它客户端本身传递用户ID可能是一种浪费,您已经在进行查找,因此您可以将数据保留在服务内部。
这也很好地为您在未来改变您的UserId概念,可能将其更改为组ID,或更改为电子邮件地址而不是数据库用户ID ...
答案 1 :(得分:0)
Oauth2.0是一个授权框架,不会处理用户身份验证。
问题是,当用户发出"访问令牌请求"用一个 用户名/密码,如果访问令牌响应包含" user-id" 领域?在这种情况下资源
它确实是一个请求访问令牌的客户端,在很多情况下,客户端不想知道资源所有者的ID,它只是想要一个令牌,允许它调用一个端点。资源服务器。资源服务器可以从访问令牌的内容中识别用户。
OpenID Connect可用于扩展OAuth2.0以包含ID令牌。这以标准格式提供基本用户信息,而无需调用其他端点。
答案 2 :(得分:0)
访问令牌通常是允许您调用API的承载令牌。在OpenID Connect中,您使用访问令牌来调用名为user_info端点的api,该端点返回一个JSON对象,其中包含有关此人的信息,如名字,姓氏等。如果您正在寻找免费的开源集中身份验证支持OAuth2的服务器,您应该查看Gluu服务器http://gluu.org