在.Net 8 Web应用程序中覆盖signin-google端点

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

我有一个应用程序,按照here定义的方式使用外部登录到Google。登录时,它会回调我的应用程序到内置的“/signin-google”端点。我的目的是拦截 Google 回调,以便我可以获取访问令牌并使用它与 Google API 进行交互。我已经构建了一个端点来覆盖默认端点,如下所示:

public async Task<IActionResult> GoogleCallback(string code, string state)
{
    await _loginService.RegisterTokenAsync(User.Identity.Name, code);

    return RedirectToAction("Index", "Home");
}

我尝试添加一条路线,例如

[Route("signin-google")]

但由于某种原因这不起作用。当我调用“https://localhost:7064/signin-google?code=test1&state=test2”时,它指向默认的signin-google端点(我试图覆盖的端点)而不是我的自定义端点。

我已经能够通过以下方式覆盖此行为:

app.UseEndpoints(endpoints =>
{
    endpoints.MapGet("/signin-google", async context =>
    {
        var queryString = context.Request.Query;
        var code = queryString["code"];
        var state = queryString["state"];

        context.Response.Redirect($"/Account/GoogleCallback?code={code}&state={state}");
    });
});

但这会阻止常规的用户名和密码登录工作,而且这是一种我不太喜欢的暴力方法。如果我能让端点方法起作用,我会很高兴,但理想情况下,我会找到某种方法来覆盖登录谷歌端点。

c# asp.net-core-mvc .net-8.0
1个回答
0
投票

虽然我没有这个问题的直接答案,但我找到了一种可以满足我的目的的解决方法,尽管它是有限的。

我没有使用访问令牌,而是创建了一个服务帐户并使用 Google 提供的 JSON 来提供凭据,如下所示:

var credential = GoogleCredential.FromStream(new FileStream("mycredentials.json", FileMode.Open));

然后我就能够对服务帐户有权访问的工作表进行修改。这对我有用,因为它们是公共工作表,但限制是我需要向该服务帐户授予我想要以编程方式编辑的任何工作表的权限。不是世界末日,但也不理想。

我仍然希望获得访问令牌,所以如果有人有解决方案,我会接受这个答案。

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