即使用户已登录,wolkenkit 也会重定向到 Auth0

wolkenkit redirects to Auth0 even when user is logged in

我只是按照 wolkenkit 文档尝试使用聊天模板测试 wolkenkit 的身份验证。用户登录似乎有效,但即使用户已经登录(没有客户端调用 auth.login 方法),用户也会被重定向到 Auth0。

这是来自客户的代码片段:

wolkenkit.connect({
    host: 'local.wolkenkit.io',
    port: 3000,
    authentication: new wolkenkit.authentication.OpenIdConnect({
        identityProviderUrl: 'https://<myIdentity>.eu.auth0.com/authorize',
        clientId: '<myClientID>',
        strictMode: false
    })
}).
    then(chat => {
        console.log("chat.auth.isLoggedIn() = " + chat.auth.isLoggedIn());
        console.log(chat.auth.getProfile());
        if (!chat.auth.isLoggedIn()) {
            return chat.auth.login();
        }
    });

package.json中,身份提供者配置如下:

"wolkenkit": {
    "environments": {
      "default": {
        "identityProvider": {
          "name": "https://<myIdentity>.eu.auth0.com/",
          "certificate": "/server/keys/<myIdentity>.eu.auth0.com"
        },...

清除 cookie 后的浏览器日志(我审查了提供者身份和 chat.auth.getProfile() 返回的对象):

Navigated to http://local.wolkenkit.io:8080/
index.js:14 chat.auth.isLoggedIn() = false
index.js:15 undefined
Navigated to https://<myIdentity>.eu.auth0.com/login?client=<clientID>...

Navigated to http://local.wolkenkit.io:8080/
index.js:14 chat.auth.isLoggedIn() = true
index.js:15 {iss: "https://<myIdentity>.eu.auth0.com/", sub: "auth0|...", aud: "...", iat: ..., exp: ..., …}
Navigated to https://<myIdentity>.eu.auth0.com/login?client=<clientID>...

虽然您配置了身份验证但被重定向通常意味着身份验证的配置方式有误。

您可能需要检查这些设置:

  • 必须使用 RS256 而非 HS256 对令牌进行签名(对于某些帐户,这似乎是 Auth0 的默认值)。要找出正在使用的签名算法,请从浏览器的本地存储中获取令牌并将其粘贴到 JWT debugger 中。然后你可以看到令牌是如何签名的。如果您需要更改签名算法,可以在 Auth0.
  • 客户端的高级设置中找到。
  • 使用同一个调试器,您还可以验证您使用的令牌和证书是否相互匹配。如果没有,您可能复制了错误的证书,或者您将路径配置为指向错误的证书。
  • 证书文件必须命名为certificate.pem。如果它有另一个名字,或者 package.json 中的路径不正确,wolkenkit 甚至不应该启动应用程序,但要确保仔细检查文件是否命名正确。
  • package.json 中,除了证书的路径,您还必须提供您使用的身份提供者的名称,在您的例子中是 https://<myIdentity>.eu.auth0.com/。请注意,此 必须与令牌中的 iss 声明完全 匹配。令牌中的声明通常包含尾部斜杠,而 package.json 中的值则不包含。如果它们不同,请使用 package.json.
  • 中的令牌值

完成更改后,确保清空本地存储,并使用以下命令重新启动 wolkenkit 应用程序(否则您的更改将不会生效):

$ wolkenkit restart

希望这对您有所帮助:-)