Oauth 2.0 如何在OpenID Connect中区分资源提供者之间的访问令牌?
我正在基于以下内容创建OpenID Connect(OIDC)提供程序。我一直在阅读OpenID Connect规范,但我无法理解访问令牌对于特定应用程序是如何唯一的 考虑以下用户Bob的示例: Bob想登录到应用程序A,因此他转到其接口,并被重定向到OIDC提供程序。身份验证后,他被重定向(隐式流)回应用程序A,并带有ID令牌和访问令牌。然后,他使用访问令牌在“/image/1”向a的API发出请求。API使用访问令牌联系OIDC提供者,以断言用户的身份为Bob。然后,API在“/image/1”处为用户Bob返回数据,假设信息存在。Bob继续将其访问令牌发送到A的API,以用于任何后续请求 然后,Bob决定访问应用程序B的API。他向B的API发送与A的API使用的相同的访问令牌。B的API使用令牌联系OIDC提供者,并断言用户的身份为Bob。然后,B的API为Bob返回请求的信息 是什么阻止了这种情况的发生?我认为至少有两种可能的解决方案:Oauth 2.0 如何在OpenID Connect中区分资源提供者之间的访问令牌?,oauth-2.0,openid-connect,openid-provider,Oauth 2.0,Openid Connect,Openid Provider,我正在基于以下内容创建OpenID Connect(OIDC)提供程序。我一直在阅读OpenID Connect规范,但我无法理解访问令牌对于特定应用程序是如何唯一的 考虑以下用户Bob的示例: Bob想登录到应用程序A,因此他转到其接口,并被重定向到OIDC提供程序。身份验证后,他被重定向(隐式流)回应用程序A,并带有ID令牌和访问令牌。然后,他使用访问令牌在“/image/1”向a的API发出请求。API使用访问令牌联系OIDC提供者,以断言用户的身份为Bob。然后,API在“/image/
欢迎您的任何意见。在任何OIDC示例中,我认为我的很多困惑都是因为没有看到“scope”参数被用来委托对资源提供者的访问 我认为您缺少的是应用程序A及其API是两个独立的应用程序。因此,令牌是为应用程序A颁发的。如果app-A-api仅将访问令牌用于用户身份验证,那么最好使用ID令牌-它可以在不访问OAuth2服务器的情况下进行验证。在此场景中,app-A-api自行管理其用户权限 如果app-A-api需要令牌来获取其客户端的作用域(权限)列表,则使用访问令牌。但在此场景中,app-A-api(和app-B-api)只是接受访问令牌-他们不是令牌的目标受众(
aud
属性)。应用程序A是令牌的受众
API只是检查访问令牌是否包含与它们相关的作用域。他们信任令牌颁发者,由用户决定是否信任应用程序A代表他们执行操作
例如,如果JavaScript应用程序C(app-C)仅使用Google Drive和Google Plus进行操作,则app-C将要求其用户提供范围属于Google Drive和Google Plus的访问令牌。这将只是一个令牌,两个谷歌API都将接受它
关于tokeninfo端点,它有自己的RFC,因此您可以检查它。有趣的答案。我想指出,令牌的访问群体可能受到授权服务器或客户端配置的限制(1个客户端对应1个RS)。此外,您还可以通过某种方式让客户指示授权请求涉及哪些RS。感谢Florent提供的信息。我不知道ResourceIndicators草案。虽然为了更好地了解它,我不需要基于请求的“Resource”的自定义令牌(如中所述)。那么,在我的两个解决方案中,如果我理解正确的话,最好让API检查授权时额外请求的范围,而不是验证“aud”参数,因为这样可以更容易地撤销令牌,并允许令牌用于多个API?