gpt4 book ai didi

c# - OpenIdConnect 重定向到 http 而不是 https

转载 作者:行者123 更新时间:2023-12-05 05:40:05 26 4
gpt4 key购买 nike

我在将 ASP.NET CORE 5.0 Web 应用程序与 OKTA 集成时遇到问题。我的公司需要将所有 Web 应用程序与 OKTA 集成。我写的这个应用程序作为 Linux 容器托管在 Fargate 集群上(并将使用 Application Load Balancer + AWS 证书来使用 HTTPS)。容器在 HTTP 上运行,并由 ALB 重定向到 HTTPS。

当我访问应用程序主机名 (https://exampleapp.companyname.com) 时,它会尝试将我重定向到以下链接:

https://dev-1234567.okta.com/oauth2/default/v1/authorize?client_id=xyz&redirect_uri=http://exampleapp.companyname.com/signin-oidc&response_type=code&scope=openid profile email&code_challenge=xyz&code_challenge_method=S256&response_mode=form_post&nonce=xyz&x-client-ver=6.7.1.0

如您所见,此 redirect_uri 将我指向 http 端点,这给了我错误 400(因为在 Okta 中我没有指定 http 登录重定向 URI,只有 HTTPS)。

当我从 https://访问页面时,为什么 Okta 会尝试将我重定向到 http://?如果我尝试将 http://地址添加到 Okta 登录 URI,当我尝试访问页面时会发生此错误:

The information you’re about to submit is not secure

当我点击“仍然发送”按钮时,页面显示 ASP.NET CORE 错误:

System.Exception: An error was encountered while handling the remote login.
---> System.Exception: OpenIdConnectAuthenticationHandler: message.State is null or empty.
--- End of inner exception stack trace ---
at Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler`1.HandleRequestAsync()
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

如何让它在这种环境下工作?在 localhost,HTTP 和 HTTPS 一切都像魅力一样工作。之前,我不得不用 cookie(SameSiteModes 等)做一些技巧,因为页面向我显示了 Corellation 错误。

这是我在项目中使用的 Startup.cs 中的 ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages();

services.AddAuthentication(options =>
{
options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
})
.AddCookie(options =>
{
options.Cookie.SameSite = SameSiteMode.Lax;
})
.AddOpenIdConnect(options =>
{
options.NonceCookie.SecurePolicy = CookieSecurePolicy.Always;
options.CorrelationCookie.SecurePolicy = CookieSecurePolicy.Always;
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Authority = oktaOrgUri;
options.RequireHttpsMetadata = true;
options.ClientId = oktaClientId;
options.ClientSecret = oktaClientSecret;
options.ResponseType = OpenIdConnectResponseType.Code;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("openid");
options.Scope.Add("profile");
options.Scope.Add("email");
options.SaveTokens = true;
options.TokenValidationParameters = new TokenValidationParameters
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(oktaClientSecret)),
NameClaimType = "name",
RoleClaimType = "groups",
ValidateIssuer = true
};
});

services.AddAuthorization();
}
oktaOrgUri = https://dev-1234567.okta.com/oauth2/default
oktaClientId and oktaClientSecret filled with values from Okta

然后在Startup.cs中配置

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}

最佳答案

在同事的帮助下,我设法解决了这个问题。

解决方案是将这部分代码添加到 Startup.cs 的配置部分

app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});

有了这个,我的应用程序始终使用 https 方案,连接到 Okta 时不再出现问题。

关于c# - OpenIdConnect 重定向到 http 而不是 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72488243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com