oidc-client登录后重定向

时间:2017-12-06 15:17:03

标签: javascript angular oidc

我有一个运行角度为2的asp.net核心应用程序。我正在使用oidc-client.js库来处理登录。目前,如果用户已经登录并跟随指向该站点的链接,则auth正常运行并且用户被带到正确的页面。但是,如果他们没有登录,则get弹回到登录页面就好了,使用正确的url返回到站点,但最终会被带到/ auth-callback页面。此时,重定向URL会丢失,并且在auth-callback之后它们会在站点的默认路径上结束。

我正在寻找的是oidc-client库中是否有任何选项可用于在auth-callback调用之后保留正确的url?通过文档和示例,没有任何东西跳出来。或者我自己要把东西放在一起?

2 个答案:

答案 0 :(得分:1)

好吧,您必须在资产中创建一个单独的html页面来处理获取令牌并在登录重定向后将其存储

  1. 在您的openID提供程序上成功登录
  2. 重定向到您的html静态页面
  3. 您的页面将获取令牌并将其存储在例如localStorage
  4. 令牌准备就绪后,您的静态html页面将重定向到您的角度应用根目录

您可以在/ assets文件夹中创建redirect_page.html

  <script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.4.1/oidc-client.min.js"></script>
  <script>
   var config = {
    userStore: new Oidc.WebStorageStateStore({ store: window.localStorage })
   };
   var mgr = new Oidc.UserManager(config);
   mgr.signinRedirectCallback().then(() => {
    window.history.replaceState({},
        window.document.title,
        window.location.origin);
        window.location = "/";
    }, error => {
    console.error(error);
   });

  </script>

并设置您的userManager配置

var config = {
  ...
  redirect_uri: `${clientRoot}/assets/redirect_page.html`,
}

答案 1 :(得分:1)

在客户端代码中,当您调用signinRedirect时,需要设置state属性以供以后使用,例如new Oidc.UserManager().signinRedirect({state:window.location.href});

然后在回调页面中可以使用它:

mgr
  .signinRedirectCallback()
  .then(function (user) {
    window.history.replaceState({}, window.document.title, window.location.origin + window.location.pathname);

    window.location = user.state || "/";
  });