Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在AspNetCore OpenIdConnect上设置重定向\u uri_C#_Asp.net Core - Fatal编程技术网

C# 在AspNetCore OpenIdConnect上设置重定向\u uri

C# 在AspNetCore OpenIdConnect上设置重定向\u uri,c#,asp.net-core,C#,Asp.net Core,在.Net上,当我创建开放ID连接身份验证选项时,我有一个属性来设置RedirectUri,这甚至是按照文档中的建议定义的,但AspNetCore上不存在这样的属性,它会自动设置为当前服务器EX:(http://localhost),有没有办法改变这一点 试图找到解决方案时,我遇到了新的AspNetCore身份验证的许多缺点,这是生产就绪还是只是WIP?在反复尝试之后,我发现您必须为OnRedirectToIdentityProvider事件设置一个事件侦听器 services.AddOpenI

在.Net上,当我创建开放ID连接身份验证选项时,我有一个属性来设置RedirectUri,这甚至是按照文档中的建议定义的,但AspNetCore上不存在这样的属性,它会自动设置为当前服务器EX:
(http://localhost)
,有没有办法改变这一点


试图找到解决方案时,我遇到了新的AspNetCore身份验证的许多缺点,这是生产就绪还是只是WIP?

在反复尝试之后,我发现您必须为
OnRedirectToIdentityProvider
事件设置一个事件侦听器

services.AddOpenIdConnect(options =>
{
    Configuration.Bind("<Json Config Filter>", options);
    options.Events.OnRedirectToIdentityProvider = async context =>
    {
        context.ProtocolMessage.RedirectUri = "<Return URI String>";
        await Task.FromResult(0);
    };
});
services.AddOpenIdConnect(选项=>
{
Configuration.Bind(“,选项);
options.Events.OnRedirectToIdentityProvider=异步上下文=>
{
context.ProtocolMessage.RedirectUri=“”;
等待任务。从结果(0);
};
});

我正在更改模式,如下所示

public static void AddCookieAuthentication(this IServiceCollection services, IConfiguration configuration)
    {
        _configuration = configuration;
        services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
            })
            .AddCookie()
            .AddOpenIdConnect(options =>
            {
                options.TokenValidationParameters.AuthenticationType = IdentityConstants.ApplicationScheme;
                options.ResponseType = "code";
                options.MetadataAddress = configuration["Authentication:Cognito:MetadataAddress"];
                options.ClientId = configuration["Authentication:Cognito:ClientId"];
                options.ClientSecret = configuration["Authentication:Cognito:ClientSecret"];
                options.GetClaimsFromUserInfoEndpoint = true;
                options.Scope.Add("openid");
                options.Scope.Add("profile");
                options.Scope.Add("email");
                options.Scope.Add("aws.cognito.signin.user.admin");

                options.Events = new OpenIdConnectEvents
                {
                    // this makes signout working
                    OnRedirectToIdentityProviderForSignOut = OnRedirectToIdentityProviderForSignOut,
                    OnRedirectToIdentityProvider = OnRedirectToIdentityProvider,
                };
            });
    }

    private static Task OnRedirectToIdentityProvider(RedirectContext ctx)
    {
        ctx.Options.Events.OnRedirectToIdentityProvider = async context =>
        {
            **context.ProtocolMessage.RedirectUri = context.ProtocolMessage.RedirectUri.Replace("http:", "https:");**
            await Task.FromResult(0);
        };
        return Task.CompletedTask;
    }

您使用的asp.net core版本是什么?在要设置选项的位置显示代码。从asp.net核心版本1.x到2.x发生了很大变化。我认为OpenIdConnectOptions上的属性是CalbackPath@JoeAudette版本是2.x,不,属性不是回调路径,在响应重定向后附加到responseURI。您不需要设置它。当前值有什么问题?在我的特定情况下,我将其设置为null,因为我正在生成从开发机器到客户端服务器的请求,该客户端服务器只回复特定于客户端的URI,然后获取响应并检查响应是否格式正确,在配置良好的环境中,这是不必要的,但在我的情况下,我无法访问客户端配置。如果我的应用程序托管在处理HTTPS的平台上,但我有一个F5设备在请求到达应用程序之前卸载SSL证书,那么应用程序在技术上解析为HTTP,但浏览器使用HTTPS。然后,中间件检测HTTP并将其重定向到oidc作为“redirect_uri=HTTP://”。OIDC看到它,重定向到HTTP,设置了cookie,我的应用重定向到HTTPS,因为F5不允许HTTP,HTTPS点击,cookie没有设置,因为它设置为HTTP而不是HTTPS,重定向回OIDC。无限重定向循环。这是有帮助的,但使用它,不会让我登录中间件。所以我一直试着登录,来回地。我已经删除了回调:,现在执行
context.ProtocolMessage.RedirectUri=config.callback