我们应该比较访问令牌和ID令牌中的“ sub”声明吗?

问题描述

如果我们在OIDC流程中获得如下所示的ID令牌和访问令牌:

Id令牌:

{
 "iss": "https://server.example.com","sub": "24400320","aud": "s6BhdRkqt3","nonce": "n-0S6_WzA2Mj","exp": 1311281970,"iat": 1311280970,"auth_time": 1311280969,"acr": "urn:mace:incommon:iap:silver"
 "amr": ["mfa","pwd","otp"]
}

访问令牌:

{
    "iss": "https://cas.nhs.uk","sub": "https://fhir.nhs.uk/Id/sds-role-profile-id"|[SDSRoleProfileID]","aud": "https://provider.thirdparty.nhs.uk/GP0001/STU3/1","exp": 1469436987,"iat": 1469436687,"reason_for_request": "directcare","requested_scope": "patient/*.read","requesting_system": "https://fhir.nhs.uk/Id/accredited-system|[ASID]","requesting_organization": "https://fhir.nhs.uk/Id/ods-organization-code|[ODSCode]","requesting_user": "https://fhir.nhs.uk/Id/sds-role-profile-id"|[SDSRoleProfileID]"
}

是否有效假设ID令牌中的“ sub”声明应与Access令牌中的“ sub”声明匹配?还是它们都是单独的表示形式?

我们甚至在资源服务器上执行这样的验证,以确保它们都形成一对并针对同一用户会话发出吗?

解决方法

根据Okta的文档,默认情况下,the 'sub' claim in the access token是Okta中的用户ID(如果使用的是具有可用用户范围的OAuth流,例如授权代码流),或者是应用程序的客户端ID(如果使用Client Credentials)流量)在Okta。但是,如果您使用的是自定义授权服务器,则the value for 'sub' can be configured

类似地,the 'sub' claim in the ID token将是Okta中的用户ID。与访问令牌不同,此值不能修改,因为OIDC standard要求此值在发行方中本地唯一。

您的资源服务器为什么要与ID令牌交互? ID令牌用于 Authentication 用例,访问令牌用于 Authorization 用例,如此处所述:https://developer.okta.com/docs/guides/validate-access-tokens/go/overview/#access-tokens-vs-id-tokens。如果您希望使用OAuth令牌保护资源服务器,则将依赖于访问令牌。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...