public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            if (error != null)
            {
                return(Redirect(Url.Content("~/") + "#error=" + Uri.EscapeDataString(error)));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, this));
            }

            ApplicationUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider,
                                                                                 externalLogin.ProviderKey));

            bool hasRegistered = user != null;

            if (hasRegistered)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);

                ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(UserManager,
                                                                                    OAuthDefaults.AuthenticationType);

                ClaimsIdentity cookieIdentity = await user.GenerateUserIdentityAsync(UserManager,
                                                                                     CookieAuthenticationDefaults.AuthenticationType);

                AuthenticationProperties properties = ApplicationOAuthProvider.CreateProperties(user.UserName);
                Authentication.SignIn(properties, oAuthIdentity, cookieIdentity);
            }
            else
            {
                IEnumerable <Claim> claims   = externalLogin.GetClaims();
                ClaimsIdentity      identity = new ClaimsIdentity(claims, OAuthDefaults.AuthenticationType);
                Authentication.SignIn(identity);
            }

            return(Ok());
        }
Exemplo n.º 2
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                ApiKey = "=)",
                User = this._service.Get(this.Authentication.User.Identity.GetUserName())
            });
        }
Exemplo n.º 3
0
        private UserInfoViewModel GetCurrentUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            return(new UserInfoViewModel
            {
                UserId = User.Identity.GetUserId(),
                UserName = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                IsCurrent = true
            });
        }
Exemplo n.º 4
0
        public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            string redirectUri = "";

            if (error != null)
            {
                return(BadRequest(Uri.EscapeDataString(error)));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }

            var redirectUriValidationResult = ValidateClientAndRedirectUri(this.Request, ref redirectUri);

            if (!string.IsNullOrWhiteSpace(redirectUriValidationResult))
            {
                return(BadRequest(redirectUriValidationResult));
            }

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                Request.GetOwinContext().Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, null));
            }

            IdentityUser user = await IsUserRegistered(externalLogin);

            bool hasRegistered          = (user != null);
            bool isRegisteredAsExternal = IsRegisteredAsExternal(user);

            var email = HttpUtility.UrlEncode(externalLogin.Email);

            redirectUri = string.Format("{0}#external_access_token={1}&provider={2}&haslocalaccount={3}&external_email={4}&isregisteredasexternal={5}",
                                        redirectUri,
                                        externalLogin.ExternalAccessToken,
                                        externalLogin.LoginProvider,
                                        hasRegistered.ToString(),
                                        email,
                                        isRegisteredAsExternal);

            return(Redirect(redirectUri));
        }
Exemplo n.º 5
0
        public async Task <IHttpActionResult> RegisterExternal(RegisterExternalModel model)
        {
            var verifiedAccessToken = new ParsedExternalAccessToken();

            if (ModelState.IsValid)
            {
                var helper = OauthHelper.Create();
                if (!string.IsNullOrEmpty(model.Provider) && !string.IsNullOrEmpty(model.ExternalAccessToken))
                {
                    verifiedAccessToken = await helper.VerifyExternalAccessToken(model.Provider, model.ExternalAccessToken);

                    if (verifiedAccessToken == null)
                    {
                        return(this.JsonError(HttpStatusCode.BadRequest, 10, "Invalid Provider or External Access Token", ModelState));
                    }
                }

                var loginInfo = await SignInManager.AuthenticationManager.GetExternalLoginInfoAsync();

                ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(loginInfo.ExternalIdentity as ClaimsIdentity);

                var registerGeneral = new RegisterGeneralModel()
                {
                    UserName = model.UserName,
                    Email    = model.Email,
                    //FirstName = externalLogin.UserName.Split(' ')[0], //First Name
                    //LastName = externalLogin.UserName.Split(' ').LastOrDefault(), //Last Name
                    ExternalAccessToken = model.ExternalAccessToken,
                    Provider            = model.Provider
                };

                var regResult = await RegisterInternal(registerGeneral);

                if (regResult.HasError)
                {
                    return(JsonError(regResult.HttpStatusCode, regResult.ServerErrorCode, regResult.ErrorMessage, regResult.ModelState));
                }
                else
                {
                    var result = new
                    {
                        userId = regResult.UserId
                    };
                    return(Json(result));
                }
            }
            else
            {
                return(JsonError(HttpStatusCode.BadRequest, 10, "Warning", ModelState));
            }
        }
        public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            string redirectUri = "http://localhost:54046/";

            if (error != null)
            {
                return(BadRequest(Uri.EscapeDataString(error)));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }

            //Fix this.

            //var redirectUriValidationResult = ValidateClientAndRedirectUri(this.Request, ref redirectUri);

            //if (!string.IsNullOrWhiteSpace(redirectUriValidationResult))
            //{
            //    return BadRequest(redirectUriValidationResult);
            //}

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, this));
            }


            IdentityUser user = await UserManager.FindAsync(new UserLoginInfo(externalLogin.LoginProvider, externalLogin.ProviderKey));

            bool hasRegistered = user != null;

            redirectUri = string.Format("{0}#external_access_token={1}&provider={2}&haslocalaccount={3}&external_user_name={4}",
                                        redirectUri,
                                        externalLogin.ExternalAccessToken,
                                        externalLogin.LoginProvider,
                                        hasRegistered.ToString(),
                                        externalLogin.UserName);

            return(Redirect(redirectUri));
        }
Exemplo n.º 7
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                FirstName = User.Identity.GetUserFirstName(),
                LastName = User.Identity.GetUserFirstName(),
                SchoolName = User.Identity.GetUserFirstName()
            });
        }
Exemplo n.º 8
0
        public async Task <UserInfoViewModel> GetUserInfo()
        {
            var externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            var user          = await UserManager.FindByEmailAsync(User.Identity.GetUserName());

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                FirstName = user.FirstName,
                LastName = user.LastName,
                Phone = user.PhoneNumber
            });
        }
Exemplo n.º 9
0
        public UserModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            var rols = ((ClaimsIdentity)User.Identity).Claims
                       .Where(c => c.Type == ClaimTypes.Role)
                       .Select(c => c.Value);


            return(new UserModel
            {
                Id = User.Identity.GetUserId(),
                Username = User.Identity.GetUserName(),
                Roles = rols,
            });
        }
Exemplo n.º 10
0
        public UserInfoViewModel GetUserInfo()
        {
            // HttpContext.Current.User.Identity.Name
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            //获取用户相关信息

            var GOwinContex  = HttpContext.Current.GetOwinContext();//.OwinContext.GetUserManager<ApplicationUserManager>();
            var _userManager = GOwinContex.GetUserManager <ApplicationUserManager>();

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName()
            });
        }
Exemplo n.º 11
0
        public async Task <IHttpActionResult> RegisterExternal(RegisterExternalBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var externalLogin = ExternalLoginData.FromIdentity(this.User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(this.InternalServerError());
            }

            var user = new UserProfile {
                UserName = model.UserName, Email = model.Email, EmailConfirmed = true
            };

            user.Logins.Add(
                new IdentityUserLogin
            {
                LoginProvider = externalLogin.LoginProvider,
                ProviderKey   = externalLogin.ProviderKey,
                UserId        = user.Id
            });

            var identityResult = await this.UserManager.CreateAsync(user);

            var createResult = this.GetErrorResult(identityResult);

            if (createResult != null)
            {
                return(createResult);
            }

            var justCreatedUser = await this.UserManager.FindByNameAsync(model.UserName);

            var roleResult = await this.UserManager.AddToRoleAsync(justCreatedUser.Id, "User");

            var addRoleResult = this.GetErrorResult(roleResult);

            if (addRoleResult != null)
            {
                return(addRoleResult);
            }

            return(this.Ok());
        }
Exemplo n.º 12
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (!User.Equals(null))
            {
                return new UserInfoViewModel
                {
                    Email = User.Identity.GetUserName(),
                    HasRegistered = externalLogin == null,
                    LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
                };
            }

            return null;
        }
Exemplo n.º 13
0
        public UserInfoViewModel GetUserInfoCustom()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            var identity = (ClaimsPrincipal)Thread.CurrentPrincipal;
            // Get the claims values
            string UserRoleValue = identity.Claims.Where(c => c.Type == ClaimTypes.Country)
                                   .Select(c => c.Value).SingleOrDefault();

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            });
        }
Exemplo n.º 14
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            var user = UserManager.FindByName(User.Identity.Name); // added to retrive additional fields

            return(new UserInfoViewModel
            {
                Email = user.Email, //User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,

                //Additional Fields
                FirstName = user.FirstName,
                LastName = user.LastName
            });
        }
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            Guid userId = Guid.Parse(User.Identity.GetUserId());
            var  user   = Context.Users.First(item => item.AspUserId.Equals(userId));

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName(),
                UserBirthDate = user.UserBirthDate,
                UserFirstName = user.UserFirstName,
                UserLastName = user.UserLastName,
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            });
        }
        public async Task <IHttpActionResult> Login(ExternalLoginProviderName provider, string error = null)
        {
            string redirectUri = string.Empty;

            if (error != null)
            {
                return(BadRequest(Uri.EscapeDataString(error)));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }

            var redirectUriValidationResult = ValidateClientAndRedirectUri(this.Request, ref redirectUri);

            if (!string.IsNullOrWhiteSpace(redirectUriValidationResult))
            {
                return(BadRequest(redirectUriValidationResult));
            }

            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                this.OwinAuthentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, this));
            }

            IdentityUser <Guid, CustomUserLogin, CustomUserRole, CustomUserClaim> user = await _authRepository.FindAsync(new UserLoginInfo(externalLogin.LoginProvider.ToString(), externalLogin.ProviderKey));

            bool hasRegistered = user != null;

            redirectUri = string.Format("{0}#external_access_token={1}&provider={2}&haslocalaccount={3}&external_user_name={4}",
                                        redirectUri,
                                        externalLogin.ExternalAccessToken,
                                        externalLogin.LoginProvider,
                                        hasRegistered.ToString(),
                                        externalLogin.UserName);

            return(Redirect(redirectUri));
        }
Exemplo n.º 17
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            ApplicationUser   user          = System.Web.HttpContext.Current.GetOwinContext()
                                              .GetUserManager <ApplicationUserManager>()
                                              .FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());

            return(new UserInfoViewModel
            {
                //UserName = User.Identity.GetUserName(),
                UserID = user.Id,
                UserName = user.UserName,
                Email = user.Email,
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            });
        }
Exemplo n.º 18
0
        public async Task <UserInfoViewModel> GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            ApplicationUser   user          = await UserManager.FindByIdAsync(User.Identity.GetUserId());

            IList <string> rolesForUser = await UserManager.GetRolesAsync(User.Identity.GetUserId());

            return(new UserInfoViewModel
            {
                Email = User.Identity.GetUserName(),
                FirstName = user.FirstName,
                LastName = user.LastName,
                Roles = rolesForUser.ToArray(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            });
        }
Exemplo n.º 19
0
        public async Task <UserInfoViewModel> GetUserInfoAsync()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            var             uId  = User.Identity.GetUserId();
            ApplicationUser user = await UserManager.FindByIdAsync(uId);

            return(new UserInfoViewModel
            {
                Id = uId,
                Name = user.FullName(),
                Email = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin?.LoginProvider,
                Roles = UserManager.GetRoles(uId)
            });
        }
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            var roleClaimValues = ((ClaimsIdentity)User.Identity).FindAll(ClaimTypes.Role).Select(c => c.Value);

            var roles = string.Join(",", roleClaimValues);

            return(new UserInfoViewModel
            {
                UserName = User.Identity.GetUserName(),
                Email = ((ClaimsIdentity)User.Identity).FindFirstValue(ClaimTypes.Email),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                UserRoles = roles
            });
        }
Exemplo n.º 21
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            var userId  = User.Identity.GetUserId();
            var context = new EscortServiceHouseEntities();
            var user    = context.Users.Find(userId);

            return(new UserInfoViewModel
            {
                UserId = User.Identity.GetUserId(),
                Username = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                Roles = user.Roles.Select(r => context.Roles.Find(r.RoleId).Name).ToList()
            });
        }
Exemplo n.º 22
0
        public async Task <IHttpActionResult> RegisterExternal(RegisterExternalBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            var user = new IdentityUser
            {
                UserName = model.UserName
            };

            user.Logins.Add(new IdentityUserLogin
            {
                LoginProvider = externalLogin.LoginProvider,
                ProviderKey   = externalLogin.ProviderKey
            });

            var result = await UserManager.CreateAsync(user);

            var errorResult = GetErrorResult(result);

            if (errorResult != null)
            {
                return(errorResult);
            }

            result = await UserManager.AddToRoleAsync(user.Id, DefaultUserRole);

            errorResult = GetErrorResult(result);

            if (errorResult != null)
            {
                return(errorResult);
            }

            return(Ok());
        }
Exemplo n.º 23
0
        public UserInfoViewModel GetCurrentUser()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            Model.User user = userBusiness.GetUserByExternalId(User.Identity.GetUserId()).Data;

            UserInfoViewModel retVal = !User.Identity.IsAuthenticated  ? null :
                                       new UserInfoViewModel
            {
                UserName      = User.Identity.GetUserName(),
                HasRegistered = user != null,
                IsAdmin       = UserManager.IsInRole(User.Identity.GetUserId(), Constants.RoleNames.Admin),
                HasPassword   = UserManager.HasPassword(User.Identity.GetUserId()),
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            };

            return(retVal);
        }
Exemplo n.º 24
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            var userdetail = _userRepository.FindByName(User.Identity.GetUserName());

            return(new UserInfoViewModel
            {
                UserName = User.Identity.GetUserName(),
                Role = CurrentUser.Role,
                FirstName = userdetail.FirstName,
                LastName = userdetail.LastName,
                EmployeeCode = userdetail.EmployeeCode,
                Email = userdetail.Email,
                PhoneNumber = userdetail.PhoneNumber,
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            });
        }
Exemplo n.º 25
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
            var _menuServices = new MP.Core.BUS.MNG.MenuServices();
            var identity      = (ClaimsPrincipal)Thread.CurrentPrincipal;

            return(new UserInfoViewModel
            {
                UserID = User.Identity.GetUserId(),
                UserName = User.Identity.GetUserName(),
                Department = identity.Claims.Where(c => c.Type == "Department").Select(x => x.Value).SingleOrDefault(),
                Email = identity.Claims.Where(c => c.Type == "Email").Select(x => x.Value).SingleOrDefault(),
                PhoneNumber = identity.Claims.Where(c => c.Type == "PhoneNumber").Select(x => x.Value).SingleOrDefault(),
                FullName = identity.Claims.Where(c => c.Type == "FullName").Select(x => x.Value).SingleOrDefault(),
                Menus = _menuServices.GetMenuByUserId(this.RequestContext.Principal.Identity.GetUserId()),
                VOCRoles = identity.Claims.Where(c => c.Type == "VOCRoles").Select(x => x.Value).SingleOrDefault(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            });
        }
Exemplo n.º 26
0
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            var userId  = User.Identity.GetUserId();
            var account = db.Accounts.Find(userId);
            var roles   = ((ClaimsIdentity)User.Identity).Claims.Where(x => x.Type == ClaimTypes.Role).ToList();


            return(new UserInfoViewModel
            {
                Id = User.Identity.GetUserId(),
                Username = User.Identity.GetUserName(),
                Email = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
                Roles = roles.Select(x => x.Value).ToArray(),
                Account = account
            });
        }
Exemplo n.º 27
0
        public async Task <UserInfoViewModel> GetUserInfo()
        {
            var externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            var userInfo = new UserInfoViewModel
            {
                UserName      = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            };

            var user = await UserManager.FindByIdAsync(User.Identity.GetUserId());

            if (user != null)
            {
                userInfo.UserRoles = string.Join(",", user.Roles.Select(iur => iur.Role.Name));
            }

            return(userInfo);
        }
Exemplo n.º 28
0
        public async Task <IHttpActionResult> GetExternalLogin(string provider, string error = null)
        {
            string redirectUri = string.Empty;

            if (error != null)
            {
                return(BadRequest(Uri.EscapeDataString(error)));
            }

            if (!User.Identity.IsAuthenticated)
            {
                return(new ChallengeResult(provider, this));
            }


            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null)
            {
                return(InternalServerError());
            }

            if (externalLogin.LoginProvider != provider)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                return(new ChallengeResult(provider, this));
            }

            IdentityUser user = await _repo.FindAsync(new UserLoginInfo(externalLogin.LoginProvider, externalLogin.ProviderKey));

            bool hasRegistered = user != null;

            redirectUri = string.Format("{0}#external_access_token={1}&provider={2}&haslocalaccount={3}&external_user_name={4}",
                                        redirectUri,
                                        externalLogin.ExternalAccessToken,
                                        externalLogin.LoginProvider,
                                        hasRegistered.ToString(),
                                        externalLogin.UserName);

            return(Redirect(redirectUri));
        }
Exemplo n.º 29
0
        public async Task <IHttpActionResult> GetUserInfo()
        {
            var externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            if (externalLogin == null && User.Identity.IsAuthenticated)
            {
                var loggedUser = await GetLoggedInUserInfoAsync();

                return(Ok(loggedUser));
            }
            else
            {
                var externalUserInfo = new ExternalUserInfoViewModel
                {
                    Email         = User.Identity.GetUserName(),
                    HasRegistered = externalLogin == null,
                    LoginProvider = externalLogin?.LoginProvider
                };
                return(Ok(externalUserInfo));
            }
        }
Exemplo n.º 30
0
        public async Task <IHttpActionResult> AddExternalLogin(AddExternalLoginBindingModel model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            this.Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);

            var ticket = this.AccessTokenFormat.Unprotect(model.ExternalAccessToken);

            if (ticket == null || ticket.Identity == null ||
                (ticket.Properties != null && ticket.Properties.ExpiresUtc.HasValue &&
                 ticket.Properties.ExpiresUtc.Value < DateTimeOffset.UtcNow))
            {
                return(this.BadRequest("Failed to login to the external provider."));
            }

            var externalData = ExternalLoginData.FromIdentity(ticket.Identity);

            if (externalData == null)
            {
                return(this.BadRequest("This external login is already associated with an account."));
            }

            var result =
                await
                this.UserManager.AddLoginAsync(
                    this.User.Identity.GetUserId(),
                    new UserLoginInfo(externalData.LoginProvider, externalData.ProviderKey));

            var errorResult = this.GetErrorResult(result);

            if (errorResult != null)
            {
                return(errorResult);
            }

            return(this.Ok());
        }