oidc-client登录后重定向

Posted

技术标签:

【中文标题】oidc-client登录后重定向【英文标题】:Redirect after oidc-client login 【发布时间】:2018-05-20 12:46:07 【问题描述】:

我有一个运行 angular 2 的 asp.net 核心应用程序。我正在使用 oidc-client.js 库来处理登录。目前,如果用户已经登录并点击该站点的链接,则身份验证会正确进行,并且用户会被带到正确的页面。但是,如果他们没有登录,则可以很好地退回到登录页面,并使用正确的 url 被带回站点,但最终会被带到 /auth-callback 页面。此时,重定向 url 会丢失,并且在 auth-callback 之后会在站点的默认路由处结束。

我正在寻找的是 oidc-client 库中是否有任何选项可用于在 auth-callback 调用后保留正确的 url?翻阅文档和示例,我没有任何反应。还是我必须自己整理一些东西?

【问题讨论】:

【参考方案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 || "/";
  );

【讨论】:

【参考方案2】:

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

    在您的 openID 提供商上登录成功 重定向到您的 html 静态页面 例如,您的页面将获取令牌并将其存储在 localStorage 中 令牌准备就绪后,您的静态 html 页面将重定向到您的 Angular 应用根目录

您可以在 /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`,

【讨论】:

以上是关于oidc-client登录后重定向的主要内容,如果未能解决你的问题,请参考以下文章

用户登录后重定向到要访问页面

如何将客人重定向到登录页面,在laravel 5.2登录后重定向回来[关闭]

登录后重定向到登录页面

CakePHP 登录后重定向到当前页面

使用 facebook 登录网站后重定向页面

登录 Django 后重定向到 Next