Oauth 2.0 OIDC广义作用域

Oauth 2.0 OIDC广义作用域,oauth-2.0,oauth,jwt,authorization,openid-connect,Oauth 2.0,Oauth,Jwt,Authorization,Openid Connect,目前正在建立一个微服务,用于使用OIDC处理与身份验证相关的内容。 现在,我们考虑访问控制,以及如何尽可能地证明未来。此身份验证服务器仅用于第一方应用程序(3个SPA,2个本地移动应用程序)。在手机上,我们使用authorization\u codegrant。每个资源服务器都会验证提供的令牌(访问令牌为JWT)本身。但是,当(将来)我们添加一个需要自己的作用域来检查的服务(例如通知:读取)时会发生什么?由于移动应用程序用户不习惯每次登录和注销(当我们通过应用程序更新->坏解决方案更新所请求的范

目前正在建立一个微服务,用于使用OIDC处理与身份验证相关的内容。 现在,我们考虑访问控制,以及如何尽可能地证明未来。此身份验证服务器仅用于第一方应用程序(3个SPA,2个本地移动应用程序)。在手机上,我们使用
authorization\u code
grant。每个资源服务器都会验证提供的令牌(访问令牌为JWT)本身。但是,当(将来)我们添加一个需要自己的作用域来检查的服务(例如通知:读取)时会发生什么?由于移动应用程序用户不习惯每次登录和注销(当我们通过应用程序更新->坏解决方案更新所请求的范围时),有什么好的解决方案来管理此场景吗

根据规范,刷新令牌时可以更改所需的作用域,但这仅限于所需的作用域比最初请求的要少,而不是更多,因此这不是一个选项

例如,Facebook只为Instagram提供了四个范围,例如
Instagram\u basic
Instagram\u content\u publish
。例如,Zalando在其令牌中仅包含作用域
普通用户
,而Wolt将用户
角色
作为声明


我认为有一些混淆,因为OAuth2或OIDC没有直接涵盖这个场景。您对此有何想法?

有一个标准,但您的挑战是找到一个支持该标准或类似标准的令牌提供商

在微服务体系结构中,问题是您是否应该到处使用授权代码流中的访问令牌,或者对于服务到服务的通信,您是否应该使用客户端凭据流


另请参见

您似乎可以使用它

例如,它可以这样工作-每当您的资源服务器在日期x之前(因此在您发出该作用域之前)获得一个没有
通知:read
作用域的令牌时,它都会与授权服务器执行交换,并且(如果服务器决定它可以执行交换)它获取包含该作用域的新访问令牌。如果令牌是在日期x之后发出的,您可以安全地假定令牌未被授予此作用域

另一种解决方案是将声明用于授权决策,而不是范围。授权服务器可以发出声明
通知\u read:true
,或类似的内容。无论何时刷新令牌,都可以在新的访问令牌中发出更多声明,规范并不阻止这一点。然后您的资源服务器应该检查访问令牌中的声明,它们可以忽略作用域。资源服务器只需检查令牌是否包含值为
true
notifications\u read
声明。如果您要求您的用户对作用域给予同意,则此解决方案会变得更加复杂,但正如您所说的,您仅为第一方使用此解决方案,因此我假设您没有使用同意屏幕


您可以看一看-第4部分介绍了在授权中使用声明的主题。

谢谢,伙计!对于服务间通信,实际上使用了客户机凭据流,因此非常容易。当前painpoint仅适用于公共web/本机应用程序与API的通信。我们使用节点oidc提供程序,因此很容易自定义。如果回答了您的问题,请随时接受答案