コード例 #1
0
ファイル: FacebookHelper.cs プロジェクト: kohku/PetMatch
        public static ProfileViewModel CreateModel(ExternalLoginInfo loginInfo)
        {
            if (loginInfo == null)
                throw new ArgumentNullException("loginInfo");

            var model = new ProfileViewModel();

            model.Name = loginInfo.ExternalIdentity.Name;
            model.Email = loginInfo.Email;

            var claim = loginInfo.ExternalIdentity.Claims.FirstOrDefault(c => c.Type == "urn:facebook:first_name");
            if (claim != null)
                model.FirstName = claim.Value;

            claim = loginInfo.ExternalIdentity.Claims.FirstOrDefault(c => c.Type == "urn:facebook:last_name");
            if (claim != null)
                model.LastName = claim.Value;

            claim = loginInfo.ExternalIdentity.Claims.FirstOrDefault(c => c.Type == "urn:facebook:gender");
            if (claim != null)
                model.Gender = claim.Value;

            DateTime birthDay = DateTime.MinValue;
            claim = loginInfo.ExternalIdentity.Claims.FirstOrDefault(c => c.Type == "urn:facebook:birthday");
            if (claim != null && DateTime.TryParseExact(claim.Value, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out birthDay))
                model.BirthDay = birthDay;

            return model;
        }
コード例 #2
0
        public async Task ExternalSignInAsync_ExternalDisabledUser_UserNotSignedIn()
        {
            mMembershipFakeFactory.UserExternal.Enabled = false;
            UserInfoProvider.SetUserInfo(mMembershipFakeFactory.UserExternal);

            var externalLoginInfo = new Microsoft.AspNet.Identity.Owin.ExternalLoginInfo
            {
                Login = new UserLoginInfo(mMembershipFakeFactory.ExternalLogin.LoginProvider, mMembershipFakeFactory.ExternalLogin.IdentityKey)
            };

            var result = await mSignInManager.ExternalSignInAsync(externalLoginInfo, false);

            CMSAssert.All(
                () => Assert.AreEqual(SignInStatus.LockedOut, result),
                () => Assert.IsNull(mOwinContext.Authentication.AuthenticationResponseGrant));
        }
コード例 #3
0
        public async Task ExternalSignInAsync_ClaimsContainCorrectSecurityStamp()
        {
            var externalLoginInfo = new Microsoft.AspNet.Identity.Owin.ExternalLoginInfo
            {
                Login = new UserLoginInfo(mMembershipFakeFactory.ExternalLoginWithSecurityStamp.LoginProvider, mMembershipFakeFactory.ExternalLoginWithSecurityStamp.IdentityKey)
            };

            var result = await mSignInManager.ExternalSignInAsync(externalLoginInfo, false);

            var claims = mOwinContext.Authentication.AuthenticationResponseGrant.Identity.Claims;

            CMSAssert.All(
                () => Assert.AreEqual(SignInStatus.Success, result),
                () => Assert.AreEqual(4, claims.Count()),
                () => Assert.IsTrue(claims.Any(x => x.Value == MembershipFakeFactory.SECURITY_STAMP), "Security stamp in claims is incorrect."));
        }
コード例 #4
0
		private static void SetCommenterValuesFromResponse(ExternalLoginInfo response, Commenter commenter)
		{
			var claims = response.ExternalIdentity;

			var emailClaim = claims.FindFirst(ClaimTypes.Email);
			var nameClaim = claims.FindFirst(ClaimTypes.Name);
			var urlClaim = claims.FindFirst("urn:google:profile");

			if (string.IsNullOrWhiteSpace(commenter.Email) && emailClaim != null && string.IsNullOrWhiteSpace(emailClaim.Value) == false)
				commenter.Email = emailClaim.Value;

			if (string.IsNullOrWhiteSpace(commenter.Name) && nameClaim != null && string.IsNullOrWhiteSpace(nameClaim.Value) == false)
				commenter.Name = nameClaim.Value;

			if (string.IsNullOrWhiteSpace(commenter.Url) && urlClaim != null && string.IsNullOrWhiteSpace(urlClaim.Value) == false)
				commenter.Url = urlClaim.Value;
		}
コード例 #5
0
        public async Task ExternalSignInAsync_ExternalUser_UserSignedIn()
        {
            var externalLoginInfo = new Microsoft.AspNet.Identity.Owin.ExternalLoginInfo
            {
                Login = new UserLoginInfo(mMembershipFakeFactory.ExternalLogin.LoginProvider, mMembershipFakeFactory.ExternalLogin.IdentityKey)
            };

            var result = await mSignInManager.ExternalSignInAsync(externalLoginInfo, false);

            var claims = mOwinContext.Authentication.AuthenticationResponseGrant.Identity.Claims;

            CMSAssert.All(
                () => Assert.AreEqual(SignInStatus.Success, result),
                () => Assert.AreEqual(4, claims.Count()),
                () => Assert.IsTrue(claims.Any(x => x.Value == mMembershipFakeFactory.UserExternal.UserID.ToString()), "ID claim missing"),
                () => Assert.IsTrue(claims.Any(x => x.Value == mMembershipFakeFactory.UserExternal.UserName), "Name claim missing"),
                () => Assert.IsTrue(claims.Any(x => x.Value == mMembershipFakeFactory.UserExternal.UserSecurityStamp), "Security stamp claim missing"));
        }
コード例 #6
0
        protected override string CreateUniqueUserName(Microsoft.AspNet.Identity.UserManager <ApplicationUser> userManager, Microsoft.AspNet.Identity.Owin.ExternalLoginInfo externalLoginInfo)
        {
            Assert.ArgumentNotNull((object)userManager, nameof(userManager));
            Assert.ArgumentNotNull((object)externalLoginInfo, nameof(externalLoginInfo));
            IdentityProvider identityProvider = this.FederatedAuthenticationConfiguration.GetIdentityProvider(externalLoginInfo.ExternalIdentity);

            if (identityProvider == null)
            {
                throw new InvalidOperationException("Unable to retrieve identity provider for given identity");
            }
            string domain = identityProvider.Domain;
            string email  = externalLoginInfo.DefaultUserName;

            // return email and domain
            return($"{domain}\\\\\\\\{email}");
        }