public IActionResult InitializeExternalSignIn([FromQuery] ExternalUserAuthenticationSchema schema) { try { if (User.Identity.IsAuthenticated) { throw new Exception(ExceptionMessage.UserHasAlreadyAuthenticated); } string GetExternalAuthenticationScheme() => schema switch { ExternalUserAuthenticationSchema.Google => GoogleDefaults.AuthenticationScheme, ExternalUserAuthenticationSchema.Vk => VkontakteAuthenticationDefaults.AuthenticationScheme, _ => throw new ArgumentOutOfRangeException(nameof(schema), schema, null) }; return(new ChallengeResult(GetExternalAuthenticationScheme(), new AuthenticationProperties { RedirectUri = $"/api/account/client/sign-in/external/verify?schema={schema:D}" })); } catch (Exception e) { return(BadRequest(new ErrorResult(e))); } }
public async Task <RedirectResult> VerifyExternalSignIn([FromQuery] ExternalUserAuthenticationSchema schema) { var token = Guid.Empty; await Exec(async operation => { token = await userAuthenticationService.TryExternalSignIn(operation, new ExternalClientSignInEntity { ExternalId = User.Claims.Get(ClaimTypes.NameIdentifier), FirstName = User.Claims.Get(ClaimTypes.GivenName) ?? User.Claims.Get(ClaimTypes.Name) ?? "", LastName = User.Claims.Get(ClaimTypes.Surname) ?? "", Email = User.Claims.Get(ClaimTypes.Email), Schema = schema }); }); return(Redirect($"cws://sign-in?token={token}")); }