重定向 URI 被覆盖,尝试使用外部域和路径进行回调 C#

问题描述 投票:0回答:1

我正在尝试在 C# .net7 中构建一个简单的 API 来处理 Oauth2 协议。我按照 YouTube 视频 (www.youtube.com/watch?v=PUXpfr1LzPE) 完成了我的所有构建。我遇到一个问题,无论我在

AuthenticationProperties.RedirectUri
中输入什么内容,它都会被我启动的域覆盖,并附加
OauthOptions.CallbackPath
。让事情变得更加困难的是,我尝试使用的重定向 URI 是一个与我启动的域、令牌端点、授权端点等完全独立的域,由 salesforce 或我的本地主机管理。所有域都采用 HTTPS,我必须将其删除,这样我的问题就不会被标记为垃圾邮件。

我尝试在评论部分设置一些

Oauthevents
,但失败了。

builder.Services.AddAuthentication("cookie").AddCookie("cookie").AddOAuth("Project", o =>
{
    o.AuthorizationEndpoint = "mysalesforceSite.com/services/oauth2/authorize";

    //o.CallbackPath = new PathString("Something.azurewebsites.net/external/callback");
    o.CallbackPath = new PathString("/external/callback");
    o.TokenEndpoint = "mysalesforceSite.my.site.com/services/oauth2/token";
    o.ClientId = "123456";
    o.ClientSecret = "A123456";
    o.ReturnUrlParameter = "code";
    o.SaveTokens = true;
    o.UserInformationEndpoint = "mysalesforceSite.com/services/oauth2/userinfo";

    //o.Events =
    //new OAuthEvents
    //{
    //    OnTicketReceived = async ctx =>
    //    {
    //        ctx.Properties.RedirectUri = "Something.azurewebsites.net/external/callback";
    //        //builder.Configuration.GetValue<string>("Project:CustomRedirectUri");
    //        await Task.Yield();
    //    },        
    //     OnCreatingTicket = async ctx =>
    //    {
    //        ctx.Properties.RedirectUri = "Something.azurewebsites.net/external/callback";
    //            //builder.Configuration.GetValue<string>("Project:CustomRedirectUri");
    //        await Task.Yield();
    //    }
    //};

}).AddCookie().AddIdentityCookies();

您将在下面的

AuthenticationProperties
对象实例中看到我正在尝试将
RedirectUri
设置为外部站点。但是,它将被我的启动域(本地主机)和上面我的
OauthOptions
中指定的回调路径覆盖。

app.MapGet("/Login", () => {

    AuthenticationProperties ap = new AuthenticationProperties()
    {
        RedirectUri = "Something.azurewebsites.net/external/callback",
        //RedirectUri = "Something.azurewebsites.net/external/callback",
        IsPersistent = true,
        AllowRefresh = true,
    };
    
    Debug.WriteLine(ap.ToString());
    return Results.Challenge(ap, authenticationSchemes: new List<string>() { "Project" });
    
});

完成后,它在 URL 和 swagger(我正在使用的 API UI 工具)中看起来像这样,将说明存在 CORS 或网络问题,但这实际上只是重定向 Uri 未正确构建,因为它将在当我手动构建它时邮递员。

我在执行时得到的: mysalesforceSite.com/services/oauth2/authorize?client_id=123456&scope=&response_type=code&redirect_uri=https%3A%2F%2Flocalhost%3A5005%2Fexternal%2Fcallback&state=CfDJ8P0Iuw_zGJdMlFeGMgyHhYRL4

我需要什么: mysalesforceSite.com/services/oauth2/authorize?client_id=123456&scope=&response_type=code&redirect_uri=https%3A%2F%2FSomething.azurewebsites.net%2Fexternal%2Fcallback&state=CfDJ8P0Iuw_zGJdMlFeGMgyHhYRL4

c# oauth salesforce .net-7.0
1个回答
0
投票

我想你用过

app.MapGet("/", (HttpContext ctx) =>
{
    ctx.User.Claims.Select(x => new { x.Type, x.Value }).ToList();
});

在你的program.cs文件中,应该将MapGet(“/”...更改为MapGet(“/GitAuth”,然后将Github中的回调更改为“http://localhost:5000/GitAuth”,你可以使用自定义关键字对于“/GitAuth”和您的项目本地主机端口。这样您就可以同时拥有主页和 Github 身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.