0

我们最近添加了 auth0,用于集成来自不同 oauth2 提供商(例如 contoso1.auth.com 和 contoso2.auth.com)的 SSO

https://auth0.com/docs/quickstart/spa/angular/01-login

我按照上面的链接,我们的前端应用程序成功地将其集成到代码中,并且能够登录并获取令牌。

         {
          "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(根据用户已通过的身份验证(contoso1/contoso2)显示或隐藏链接。但 auth0 accesstoken 没有提供有关颁发者“iss”的任何详细信息(egcontoso1.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 详细信息。

4

1 回答 1

0

是否需要仅使用前端获取此信息?

根据这篇 Auth0文章,如果您有一个后端,它会更容易一些:

如果您的代码在后端运行,那么我们可以假设您的服务器可以安全地存储机密(如您所见,我们在后端场景中使用机密)。

使用后端,您将能够检索和解析身份数组,该数组清楚地标识了 提供者连接user.identities[i].provider下的原始颁发者。

如果仅使用前端,则工作量更大,您需要构建代理

使用前端应用程序时,调用 IdP API 的过程与后端过程不同,因为前端应用程序是无法安全保存凭据的公共应用程序。由于可以查看和更改 SPA 代码,并且可以反编译和检查本机/移动应用程序,因此不能信任它们保存密钥或密码等敏感信息。

引用的文章包含“告诉我如何”框中的链接,可能在这方面更感兴趣。

从您的帖子看来,似乎只使用了一个前端,但我包含了有关后端的信息,以防您花时间实现一个小型后端,如果纯粹是为了让检索身份提供者更容易一些。

于 2021-07-23T06:31:45.000 回答