当前位置: 首页 > 知识库问答 >
问题:

在.net core 3预览版8升级后应对SPA/Embedded Identity Server问题

高锦
2023-03-14

我们有一个React SPA,它最初是使用SPA模板创建的,运行在.NET Core 3 preview 7上。React SPA“客户端”配置为隐式流,并成功使用oidc客户端。一切正常。

以下是my startup.cs中的客户端配置:

        var mySPAClient = new IdentityServer4.Models.Client()
        {
            AccessTokenLifetime = accessTokenLifetime,
            RedirectUris =
                {
                    $"{host}/authentication/login-callback",
                    $"{host}/silent-refresh.html"
                },
            PostLogoutRedirectUris =
                {
                    $"{host}/authentication/logout-callback"
                },
            ClientId = "projectName.web",
            AllowedScopes =
                {
                    "projectName.webAPI",
                    "openid",
                    "profile"
                },
            ClientName = "projectName.web",
            RequireConsent = false,
            AllowedGrantTypes =
                {
                    IdentityModel.OidcConstants.GrantTypes.Implicit
                },
            AllowAccessTokensViaBrowser = true,
        };

但是现在,当我升级到预览7的任何程序集的预览8时,我在日志中得到以下错误

[10:55:34错误]无效的客户端授予类型:authorization_codeAuthorizequiestValidationLog{ClientId:"projectame.web", ClientName:"projectame.web", ReDirectUri:"https://localhost:44343/authentication/login-callback", AlloweReDirectUris:["https://localhost:44343/authentication/login-callback ", "https://localhost:44343/silent-refresh.html"],SubjectId:匿名,响应类型:代码,响应模式:查询,GrantType:authorization_code,请求范围:",状态:a1e84334a8c94b7db599ddb9336447c8,UiLocales:null,Nonce:null,身份验证内容引用类:null,显示模式:null,提示模式:null,最大年龄:null,登录提示:null,SessionId: null, Raw:[("client_id":"projectame.web "), ("redirect_uri":"https://localhost:44343/authentication/login-callback "), ("response_type":"code"),("范围":"projectame.webAPI openid配置文件"),("state":"a1e84334a8c94b7db599ddb9336447c8"),("code_challenge":"E8p1sg1Y0TdbhxcGB-_fbx7D6GnJXfCpcYu1IHZC_k"),("code_challenge_method":"S256"),("提示":"无")] } (IdtyServer4。验证。[10:55:34错误]请求验证失败。endpoint。授权endpoint

我不知道为什么它现在指的是授权代码,并且出现了这个错误?

为任何帮助干杯

共有2个答案

方斌
2023-03-14

我已经找到了我的。但不确定它是否适用于您的。在我的例子中,问题是我有一个不知何故不匹配的流程流。当我试图修改React with Auth示例以使用EF Core时,在AuthorizeService.js/completeSignIn()中没有进行updateState调用。代码似乎导致在返回SignIn()之前对令牌endpoint进行另一次调用,而没有updateEstate()调用来保存状态。第二次调用失败,因为代码在第一次调用后过期。我不知何故从React with Redux示例中找到了另一个源代码,它在completeSignIn()中具有必需的updateEstate()调用。除了非常不同的AuthorizeService.js文件外,React with Auth示例和React with Redux示例之间的其他身份验证/授权相关代码相同。这是新的completeSignIn代码:

    async completeSignIn(url) {
        await this.ensureUserManagerInitialized();
        try {
            const { state } = await this.userManager.readSigninResponseState(url, this.userManager.settings.stateStore);
            if (state.request_type === 'si:r' || !state.request_type) {
                let user = await this.userManager.signinRedirectCallback(url);
                this.updateState(user);
                return this.success(state.data.userState);
            }
            if (state.request_type === 'si:p') {
                await this.userManager.signinSilentCallback(url);
                return this.success(undefined);
            }
            if (state.request_type === 'si:s') {
              await this.userManager.signinSilentCallback(url);
              return this.success(undefined);
            }

            throw new Error(`Invalid login mode '${state.request_type}'.`);
        } catch (signInResponseError) {
            console.log('There was an error signing in', signInResponseError);
            return this.error('Sing in callback authentication error.');
        }
    }
杨利
2023-03-14

响应\u类型更改为“token”而不是“code”,您应该可以了

更新:

确保提供正确的权限、客户id、响应类型、范围设置

 类似资料:
  • 版本升级 1.从论坛上下载对应的更新包 第一种:对于宝塔用户 升级之前请先备份好文件及数据库 下载下更新包,需要先在本地解压,然后把所需文件再次压缩,如下图: 文件覆盖完之后,如若有sql语句,则在对应的数据库执行该语句即可。 升级成功。。 第二种:对于服务器用户 升级之前请先备份好文件及数据库 下载下更新包,解压,选择文件覆盖到根目录即可。。 文件覆盖完之后,如若有sql语句,则在对应的数据库执

  • 从带有SP1的AEM 6.2升级到AEM 6.4后,很少有软件包未安装。旧版本处于已安装状态。 对于新软件包,显示消息为“似乎安装了另一个版本:”请参见下面的屏幕截图。 正因为如此,我可以看到很少的脚本没有更新最新的API。例如AEM 6.4升级实例:

  • 我在Ubuntu18.04上使用ELasticsearch。当我尝试运行“./elasticsearch-setup-passwords”脚本时,它显示以下错误。 未来版本的Elasticsearch将需要Java 11;您的Java版本[/usr/lib/jvm/java-8-openjdk-amd64/jre]不符合此要求 但当我检查Jaa版本时,它显示的是Java 11号。 我把Java从8

  • 0.2.X

  • 从 0.8.x, 0.9.x, 0.10.0.x, 0.10.1.x, 0.10.2.x, 0.11.0.x 升级到1.0.0 Kafka 1.0.0 介绍了通信协议方面的改变。 遵循下面的滚动升级计划,可以保证您在升级过程中不用停机。 在升级之前,请先查看1.0.0版本中显著的变化。 滚动升级计划: 更新所有代理上的server.properties 并添加以下属性: CURRENT_KAFKA

  • 无非就3个原因吧 为了fix bug 为了新特性 为了爱,就是要追新 从1.a.38开始的版本,升级到最新版的成本都不大. 做到100%兼容是不现实的,但可以肯定的是, 遇到的问题的均有解决的办法. 有些兼容性问题,属于"错误"得到修正,老版本能这样写是"bug", ^_^ 这是一个汇总帖子,随时更新, 也会按版本的增长继续增长.... 请先浏览当前版本到最新版的发行注记,然后再看本列表 IE下a