首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OidcClient.readSigninResponseState:在存储- oidc-client-js (角)中没有找到匹配状态。

OidcClient.readSigninResponseState:在存储- oidc-client-js (角)中没有找到匹配状态。
EN

Stack Overflow用户
提问于 2020-05-07 18:16:04
回答 2查看 11.3K关注 0票数 10

我使用与Azure集成在我的角(9)应用程序中。signinRedirect() & signinSilent()函数正在按预期工作。但是对于signinPopup()在浏览器url片段中成功地获得了访问令牌,但是它引发了下面提到的错误。

app.component.ts:83错误:在oidc-client.min.js:1的存储中没有找到匹配状态

令人惊讶的是,在signin-callback.html中,当我将response_type作为查询var userManager = new Oidc.UserManager({response_mode: "query"});传递时,登录弹出会成功地工作,但是登录重定向失败了。

错误:没有响应状态

我最初遵循了这个文章

以下是我的服务代码:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { UserManager, UserManagerSettings, User } from 'oidc-client';

import { environment } from 'src/environments/environment';

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  private userManager: UserManager;

  constructor() {
    this.instantiate();
  }

  private instantiate() {
   this.userManager = new UserManager(this.getOidcSettings());
  }

  public async signinRedirect(): Promise<any> {
    return this.userManager.signinRedirect();
  }

  public async signinSilent(): Promise<User> {
    return this.userManager.signinSilent();
  }

  public async signinPopup(): Promise<User> {
    return this.userManager.signinPopup();
  }

  public async signoutRedirect(): Promise<any> {
    this.userManager.signoutRedirect();
    this.userManager.clearStaleState();
  }

OIDC设置:

代码语言:javascript
复制
const userManagerSettings: UserManagerSettings = {
      client_id: 'my clientid',
      authority: 'my authority',

      redirect_uri: 'http://localhost:4200/assets/oidc/signin-callback.html',
      silent_redirect_uri: 'http://localhost:4200/assets/oidc/silent-refresh-callback.html',
      post_logout_redirect_uri: 'https://localhost:4200/',

      response_type: 'token',
      response_mode: 'fragment',
      scope: 'my api scope',

      loadUserInfo:false
    };

signin-callback.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.10.1/oidc-client.min.js"></script>
    <script>
      var userManager = new Oidc.UserManager();

      userManager.signinRedirectCallback().then(
        (user) => {
          alert('signin redirect successful.');
          window.history.replaceState(
            {},
            window.document.title,
            window.location.origin
          );
          window.location = '/';
        },
        (err) => {
          alert('Error caught in signinRedirectCallback()');
          console.log('Error caught in signinRedirectCallback().');
          console.error(err);
        }
      );

      userManager.signinPopupCallback().then(
        (user) => {
          alert('signin pop up successful.');
          window.history.replaceState(
            {},
            window.document.title,
            window.location.origin
          );
          window.location = '/';
        },
        (err) => {
          alert('Error caught in signinPopupCallback()');
          console.log('Error caught in signinPopupCallback().');
          console.error(err);
        }
      );
    </script>
  </head>
  <body></body>
</html>

silent-refresh-callback.html

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en">
  <head>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/oidc-client/1.10.1/oidc-client.min.js"></script>
    <script>
      var userManager = new Oidc.UserManager();
      userManager.signinSilentCallback().catch((err) => {
        console.log('Error caught in signinSilentCallback().');
        console.error(err);
      });
    </script>
  </head>
  <body></body>
</html>
EN

回答 2

Stack Overflow用户

发布于 2020-10-11 02:51:53

我们也遇到了一个类似的问题,这个错误间歇性地出现在一个子集的用户身上。到目前为止,我们已经了解到了发生这种情况的两个具体原因:

  1. 一些拥有系统时钟的用户在当前实际时间之外设置超过5分钟(在oidc-client-js中,clockSkew默认为5分钟)。
  2. 一些用户正在共享和重用由Identity Server生成的唯一生成的登录URL w/安全参数。可以使用身份服务器登录,但像nonce这样的安全vars不匹配(最后在oidc-signin回调中抛出了“在存储中找到不匹配状态”错误)。
票数 1
EN

Stack Overflow用户

发布于 2021-09-21 16:30:16

这也发生在我身上,在我的例子中,我们用https配置了Identity Server站点,我正在尝试访问旧的书签URL,它被存储为http。

这引起了我同样的OIDC问题。在将URL还原回https之后,一切都对我有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61664891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档