예제 #1
0
        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)));
            }
        }
예제 #2
0
        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}"));
        }