auth0 访问令牌不显示颁发者详细信息
auth0 access token doesn't show issuer details
我们最近添加了 auth0 以集成来自不同 oauth2 提供商的 SSO(例如 contoso1.auth.com 和 contoso2.auth.com)
https://auth0.com/docs/quickstart/spa/angular/01-login
我按照上面的步骤 link 并且我们的前端应用程序成功地将其集成到代码中并且能够登录并获取令牌。
{
"iss": "https://TENANT_NAME.auth0.com/",
"sub": "auth0|SOME_HASH",
"aud": [
"https://API_IDENTIFIER",
"https://TENANT_NAME.auth0.com/userinfo"
],
"iat": 1563699940,
"exp": 1563786340,
"azp": "SOME_OTHER_HASH",
"scope": "openid profile email"
}
在我们的 angular 应用程序中,我们想要呈现 ui(显示或隐藏 links 基于用户已经通过的身份验证(contoso1/contoso2)。但是 auth0 accesstoken 不提供有关发行者“iss”的任何详细信息(例如contoso1.auth.com 或 contoso2.auth.com)
我们不能依靠电子邮件来判断 SSO 用户属于哪个,因为在我们的例子中,contoso1 和 contoso2 可以让来自彼此系统的用户拥有自己的电子邮件 ID。
在 auth0 页面上花了一些时间后,我意识到我们在 auth0 对象的数据上下文中有一个字段“连接”,它存储了名称。虽然我们可以使用它作为临时解决方法,但我们不能依赖它来确定哪个 SSO 流程用户登录。
{
tenant: "identity-dev"
clientID: "fdsfsdf-dfsdfsd8989",
clientName: "Angualr Portal",
clientMetadata: "{}"
connection : "contoso1-backchannel",
connectionStrategy:"oidc"
....more
}
请告诉我如何获取令牌中的 iss 或发行者 url 详细信息。
是否需要仅使用前端获取此信息?
根据这个 Auth0 article,如果你有后端的话会更容易一些:
If your code runs in the backend, then we can assume that your server is trusted to safely store secrets (as you will see, we use a secret in the backend scenario).
使用后端,您将能够检索和解析 identities 数组 user.identities[i].provider
,它清楚地标识了 provider[= 下的原始发行者31=] 和 连接 键。
如果仅使用前端,则工作量更大,您需要 build a proxy:
When working with a frontend app, the process for calling IdP APIs differs from the backend process because frontend apps are public applications that cannot hold credentials securely. Because SPA code can be viewed and altered, and native/mobile apps can be decompiled and inspected, they cannot be trusted to hold sensitive information like secret keys or passwords.
引用的文章包含“告诉我如何”框中的链接,您可能会对此感兴趣。
从你的 post 来看,似乎只使用了一个前端,但我包含了有关后端的信息,以防你值得花时间来实现一个小的后端,如果纯粹只是为了检索身份提供者更容易一些。
我们最近添加了 auth0 以集成来自不同 oauth2 提供商的 SSO(例如 contoso1.auth.com 和 contoso2.auth.com)
https://auth0.com/docs/quickstart/spa/angular/01-login
我按照上面的步骤 link 并且我们的前端应用程序成功地将其集成到代码中并且能够登录并获取令牌。
{
"iss": "https://TENANT_NAME.auth0.com/",
"sub": "auth0|SOME_HASH",
"aud": [
"https://API_IDENTIFIER",
"https://TENANT_NAME.auth0.com/userinfo"
],
"iat": 1563699940,
"exp": 1563786340,
"azp": "SOME_OTHER_HASH",
"scope": "openid profile email"
}
在我们的 angular 应用程序中,我们想要呈现 ui(显示或隐藏 links 基于用户已经通过的身份验证(contoso1/contoso2)。但是 auth0 accesstoken 不提供有关发行者“iss”的任何详细信息(例如contoso1.auth.com 或 contoso2.auth.com)
我们不能依靠电子邮件来判断 SSO 用户属于哪个,因为在我们的例子中,contoso1 和 contoso2 可以让来自彼此系统的用户拥有自己的电子邮件 ID。
在 auth0 页面上花了一些时间后,我意识到我们在 auth0 对象的数据上下文中有一个字段“连接”,它存储了名称。虽然我们可以使用它作为临时解决方法,但我们不能依赖它来确定哪个 SSO 流程用户登录。
{
tenant: "identity-dev"
clientID: "fdsfsdf-dfsdfsd8989",
clientName: "Angualr Portal",
clientMetadata: "{}"
connection : "contoso1-backchannel",
connectionStrategy:"oidc"
....more
}
请告诉我如何获取令牌中的 iss 或发行者 url 详细信息。
是否需要仅使用前端获取此信息?
根据这个 Auth0 article,如果你有后端的话会更容易一些:
If your code runs in the backend, then we can assume that your server is trusted to safely store secrets (as you will see, we use a secret in the backend scenario).
使用后端,您将能够检索和解析 identities 数组 user.identities[i].provider
,它清楚地标识了 provider[= 下的原始发行者31=] 和 连接 键。
如果仅使用前端,则工作量更大,您需要 build a proxy:
When working with a frontend app, the process for calling IdP APIs differs from the backend process because frontend apps are public applications that cannot hold credentials securely. Because SPA code can be viewed and altered, and native/mobile apps can be decompiled and inspected, they cannot be trusted to hold sensitive information like secret keys or passwords.
引用的文章包含“告诉我如何”框中的链接,您可能会对此感兴趣。
从你的 post 来看,似乎只使用了一个前端,但我包含了有关后端的信息,以防你值得花时间来实现一个小的后端,如果纯粹只是为了检索身份提供者更容易一些。