首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当IdentityServer4重新启动时,客户端应用程序(oidc)被重定向到登录

当IdentityServer4重新启动时,客户端应用程序(oidc)被重定向到登录
EN

Stack Overflow用户
提问于 2021-04-27 20:24:41
回答 1查看 109关注 0票数 0

我有一个使用外部提供者进行身份验证的IdentityServer实现,以及一个使用oidc-client库实现oidc隐式流的客户端应用程序。所有工作正常(登录、注销、刷新令牌、ecc…)直到IdentityServer关闭(例如,由于不活动)。

当IdentityServer重新启动时,如果会话/令牌仍然有效,我的客户端也会被重定向到登录。我尝试使用OperationalStore或InMemoryPersistedGrants,但在服务重新启动后,在没有关闭浏览器的情况下,我总是有相同的行为。就像在启用了OperationalStore的数据库中存储了任何会话/令牌一样。取而代之的是,cookie被浏览器会话正确地持久化,并允许在重启后在IdentityServer页面中导航,而无需询问登录。

在服务重新启动后,(从客户端)重定向到登录的API调用如下: IdS-server/connect/authorize?client_id=client-id&redirect_uri=redirectUri&response_type=code&scope=scopes&state=state&code_challenge=codeChallenge &code_challenge_method=S256&response_mode=query

我的IdentityServer中是否有一些缺失或错误的配置?

代码语言:javascript
运行
复制
        //
        // IdentityServerBuilder
        //
        identityServerBuilder = services.AddIdentityServer();

        // this adds the operational data from DB (codes, tokens, consents)
        identityServerBuilder.AddOperationalStore(options =>
        {
            options.ConfigureDbContext = builder =>
                builder.UseSqlServer(connectionString,
                    sql => sql.MigrationsAssembly(migrationsAssembly));

            // this enables automatic token cleanup. this is optional.
            options.EnableTokenCleanup = true;
            options.TokenCleanupInterval = 30;
        });


        identityServerBuilder.AddInMemoryIdentityResources(identityServerService.GetIdentityResources())
            .AddInMemoryApiScopes(identityServerService.GetApiScopes())
            .AddInMemoryApiResources(identityServerService.GetApiResources())
            .AddInMemoryClients(identityServerService.GetClients());


        identityServerBuilder.AddTestUsers(identityServerService.GetUsers().ToTestUsers().ToList());

        identityServerBuilder.AddDeveloperSigningCredential();

        //
        // AuthenticationBuilder
        //
        var cookieScheme = identityServerConfig.GetCookieSchemeOrDefault();

        if (identityServerConfig.IsCookieSchemeCustom())
        {
            authenticationBuilder = services.AddAuthentication(cookieScheme).AddCookie(cookieScheme, options =>
            {
                options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
                options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
            });
        }
        else
        {
            authenticationBuilder = services.AddAuthentication().AddCookie(options =>
            {
                options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
                options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;
            });
        }
EN

Stack Overflow用户

发布于 2021-04-27 20:35:52

因为您在生产中使用以下语句:

代码语言:javascript
运行
复制
AddDeveloperSigningCredential()

这意味着,如果您在整个开发过程中没有记住令牌签名密钥,则将重新创建它。最佳实践是在生产中不使用此语句,而是添加一个更永久的签名密钥,可能是在数据库中,或者在Azure密钥库或其他可以安全存储它的地方。

第二件事是,您还需要配置Data Protection API,并将一个加密密钥传递给它,该密钥也保存在您的系统之外。这与签名密钥问题类似。我写了一篇关于它的博客文章here。部署之间的加密密钥必须相同,否则用户将在重新部署后注销,因为他们的cookie将不再被接受。

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

https://stackoverflow.com/questions/67283000

复制
相关文章

相似问题

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