簡體   English   中英

使用 C# ASP.NET Core Web API 進行谷歌身份驗證

[英]Google authentication with C# ASP.NET Core Web API

問題:如何使用 ASP.NET Core 后端 API 通過 google 身份驗證注冊或登錄用戶?

我有一個帶有 react.js 的前端並且工作正常但我不知道如何處理我的后端服務器。 在我看來,Google 文檔很難理解。 在網上我找不到與我的情況類似的例子。 我只能找到使用 ASP.NET Core MVC 標識的示例,但這不是我的情況。

const res = await fetch('/api/user/google-login', {
   method: 'POST',
   body: JSON.stringify({
       token: response.credential,
   }),
   headers: {
      'Content-Type': 'application/json',
   },
});

我的前端將憑據發送到我的后端服務器,但之后我不知道該怎么做。

有人有這種情況的例子或者有人知道可以做什么嗎?

[HttpPost]
[Route("/google-login")]
public async Task<IActionResult> GoogleLogin([FromHeader] string token)
{
    // what to do here..?
}

我相信會有更好的方法解決這個問題,但這就是我現在解決它的方法。 我使用 GoogleJsonWebSignature 來檢索外部用戶 ID。 每次身份驗證時,它都會檢查用戶是否存在於系統中,如果用戶尚未注冊,則用戶將被注冊。我的代碼如下。

[HttpPost]
[Route("/api/user/google-login")]
public async Task<ActionResult> GoogleLogin([FromHeader] string token)
{
    await _userService.Authenticate(token);
    
    return Ok();
}

public async Task<bool> Authenticate (string idToken)
{
    var payload = await GetGooglePayload(idToken);

    if(! await UserExistsByExternalId(payload.Subject))
    {
        Register(payload.Subject);
    }

    return true;
 }

 public async Task<GoogleJsonWebSignature.Payload> GetGooglePayload(string idToken)
 {
    //Will throw a InvalidJwtException if the passed value is not valid JWT
    GoogleJsonWebSignature.Payload validPayload = await GoogleJsonWebSignature.ValidateAsync(idToken);

    return validPayload;
 }

 public void Register(string externalId)
 {
     User newUser = new User(externalId);
     _userRepository.Register(newUser);
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM