[*] Nach dem Anmelden leitet Google wieder zu /Signin-Google um, und meine API erhält das Google Cookie. Token.[HttpGet("google")]
[AllowAnonymous]
public async Task RedirectToGoogleProvider()
{
var redirectUrl = Url.Action(nameof(GoogleResponse), "OAuth", new
{
returnUrl = "https://google.com"
}, Request.Scheme);
var properties = new AuthenticationProperties { RedirectUri = redirectUrl };
return Challenge(properties, GoogleDefaults.AuthenticationScheme);
}
[HttpGet("signin-google")]
[AllowAnonymous]
public async Task GoogleResponse([FromQuery] string returnUrl, CancellationToken cancellationToken)
{
var authenticateResult = await HttpContext.AuthenticateAsync(GoogleDefaults.AuthenticationScheme);
if (!authenticateResult.Succeeded)
return BadRequest("Google authentication failed.");
var claims = authenticateResult.Principal.Identities.FirstOrDefault()?.Claims;
var email = claims?.FirstOrDefault(c => c.Type == ClaimTypes.Email)?.Value;
if (string.IsNullOrEmpty(email))
return BadRequest("Email not found");
var result = await _authenticationService.SignInWithProviderAsync("google", email, cancellationToken);
return result.Match(
success => Redirect("http://localhost:3000"), // Redirect to web app
BadRequest
);
}
< /code>
Meine Fragen: < /p>
- Da dieser Fluss eine Umleitung beinhaltet, kann ich keine Token (Zugang /Aktualisierung) in den Antwortkörper einbeziehen. Was ist die beste Praxis, um die Token nach OAuth in einem umleitungsbasierten Fluss sicher zu liefern? (z. B. sollte ich Cookies für Webcodes für Web?) < /p>
< /li>
Wie sollte ich diesen Fluss für mobile Apps (wie Flattern) bewältigen, wo ich keine Cookies verwenden kann und die Token sicher empfangen muss? Soll ich ein benutzerdefiniertes URI -Schema umleiten und einen Code/Token austauschen?