コード例 #1
0
        public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
        {
            if (identity == null)
            {
                return null;
            }

            Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

            if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer)
                || String.IsNullOrEmpty(providerKeyClaim.Value))
            {
                return null;
            }

            if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
            {
                return null;
            }

            return new ExternalLoginData
            {
                LoginProvider = providerKeyClaim.Issuer,
                ProviderKey = providerKeyClaim.Value,
                UserName = identity.FindFirstValue(ClaimTypes.Name),
                ExternalAccessToken = identity.FindFirstValue("ExternalAccessToken"),
            };
        }
コード例 #2
0
 public static User CreateUser(ClaimsIdentity claimsIdentity)
 {
     return new User
     {
         Id = Int32.Parse(claimsIdentity.FindFirstValue(ClaimTypes.NameIdentifier)),
         Email = claimsIdentity.FindFirstValue(ClaimTypes.Email),
         FullName = claimsIdentity.FindFirstValue(ClaimTypes.GivenName),
         IsVerified = Boolean.Parse(claimsIdentity.FindFirstValue(ClaimTypeIsVerified)),
         TimeStamp = ClaimsMapper.GetTimeStamp(claimsIdentity.FindFirstValue(ClaimTypes.Version))
     };
 }
コード例 #3
0
 private UserProfile GetFromFacebook(ClaimsIdentity identity)
 {
     string accessToken = identity.FindFirstValue("FacebookAccessToken");
     var fbClient = new Facebook.FacebookClient(accessToken);
     dynamic fbInfo = fbClient.Get("/me?fields=id,name,email,first_name,last_name");
     return new UserProfile
     {
         Email = fbInfo.email,
         Name = fbInfo.name
     };
 }
コード例 #4
0
        public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
        {
            var providerKeyClaim = identity?.FindFirst(ClaimTypes.NameIdentifier);

            if (IsNullOrEmpty(providerKeyClaim?.Issuer) || IsNullOrEmpty(providerKeyClaim.Value))
            {
                return null;
            }

            if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
            {
                return null;
            }

            return new ExternalLoginData
            {
                LoginProvider = providerKeyClaim.Issuer,
                ProviderKey = providerKeyClaim.Value,
                UserName = identity.FindFirstValue(ClaimTypes.Name),
                Email = identity.FindFirstValue(ClaimTypes.Email)
            };
        }
コード例 #5
0
        public static AuthenticationProperties CreateProperties(ClaimsIdentity identity)
        {
            var roleClaimValues = identity.FindAll(ClaimTypes.Role).Select(c => c.Value);

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

            IDictionary<string, string> data = new Dictionary<string, string>
            {
                { "userName", identity.FindFirstValue(ClaimTypes.Name) },
                { "userRoles", roles }
            };

            return new AuthenticationProperties(data);
        }
コード例 #6
0
        public static ExternalLoginModel FromIdentity(ClaimsIdentity identity)
        {
            if (identity == null)
            {
                return null;
            }

            Claim idClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

            if (!IsOk(idClaim))
                return null;

            ExternalLoginModel result = new ExternalLoginModel();
            result.IsRegistered = (idClaim.Issuer == ClaimsIdentity.DefaultIssuer);

            ExternalLoginProvider loginProvider;
            if (!Enum.TryParse<ExternalLoginProvider>(idClaim.OriginalIssuer, ignoreCase: true, result: out loginProvider))
                return null;
            result.Provider = loginProvider;

            if (identity.AuthenticationType == DefaultAuthenticationTypes.ExternalCookie)
            {
                result.ProviderKey = idClaim.Value;
                result.Email = identity.FindFirstValue(ClaimTypes.Email);
                result.FullName =
                    loginProvider == ExternalLoginProvider.Facebook ?
                    identity.FindFirstValue("urn:facebook:name") :
                    identity.FindFirstValue(ClaimTypes.Name);
            }
            else
            {
                result.ProviderKey = identity.FindFirstValue(ClaimTypes.Sid);
                result.Email = identity.FindFirstValue(ClaimTypes.Email);
                result.FullName = identity.FindFirstValue(ClaimTypes.GivenName);
            }

            result.AvatarUrl = identity.FindFirstValue(OwinHelper.ClaimTypeAvatarUrl);
            return result;
        }
コード例 #7
0
ファイル: AccountController.cs プロジェクト: jdoan3/Travelfy
            public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
            {
                if (identity == null)
                {
                    return null;
                }

                Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

                if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer) || String.IsNullOrEmpty(providerKeyClaim.Value))
                {
                    return null;
                }

                if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
                {
                    return null;
                }
                var fb = new FacebookClient(identity.FindFirstValue("ExternalAccessToken"));
                dynamic myInfo = fb.Get("/me?fields=email"); 
                return new ExternalLoginData
                {
                    LoginProvider = providerKeyClaim.Issuer,
                    ProviderKey = providerKeyClaim.Value,
                    UserName = identity.FindFirstValue(ClaimTypes.Name),
                    EmailAddress = myInfo.email,
                    ExternalAccessToken = identity.FindFirstValue("ExternalAccessToken"),
                };
            }
コード例 #8
0
            public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
            {
                if (identity == null)
                {
                    return null;
                }

                Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

                //判斷 Issuer 是否為 Local Authority ( 這邊的Issuer為 Google, FB )
                if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer) || String.IsNullOrEmpty(providerKeyClaim.Value))
                {
                    return null;
                }

                if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
                {
                    return null;
                }

                //傳回要準備寫入 UserLogin DB 的資訊
                return new ExternalLoginData
                {
                    LoginProvider = providerKeyClaim.Issuer,
                    ProviderKey = providerKeyClaim.Value,
                    UserName = identity.FindFirstValue(ClaimTypes.Name),
                    ExternalAccessToken = identity.FindFirstValue("ExternalAccessToken"),
                };
            }
コード例 #9
0
        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);
            }

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

            bool hasRegistered = user != null;

            if (hasRegistered)
            {
                Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie);
                
                ClaimsIdentity oAuthIdentity = await UserManager.CreateIdentityAsync(user, OAuthDefaults.AuthenticationType);

                ClaimsIdentity cookieIdentity = await UserManager.CreateIdentityAsync(user, 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);
                CreateUserFileFolder(identity.FindFirstValue(ClaimTypes.Name));
                Authentication.SignIn(identity);
            }

            return Ok();
        }
コード例 #10
0
            public static ExternalLoginData FromIdentity(ClaimsIdentity identity) {
                if (identity == null) {
                    return null;
                }

                Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

                if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer)
                    || String.IsNullOrEmpty(providerKeyClaim.Value)) {
                    return null;
                }

                if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer) {
                    return null;
                }

                return new ExternalLoginData {
                    LoginProvider = providerKeyClaim.Issuer,
                    ProviderKey = providerKeyClaim.Value,
                    UserName = identity.FindFirstValue(ClaimTypes.Email) == null ? identity.FindFirstValue(ClaimTypes.NameIdentifier) + "@" + providerKeyClaim.Issuer.ToLower() + ".com" : identity.FindFirstValue(ClaimTypes.Email)
                };
            }
コード例 #11
0
            public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
            {
                if (identity == null)
                {
                    return null;
                }

                Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

                if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer)
                    || String.IsNullOrEmpty(providerKeyClaim.Value))
                {
                    return null;
                }

                if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
                {
                    return null;
                }

                return new ExternalLoginData
                {
                    LoginProvider = providerKeyClaim.Issuer,
                    ProviderKey = providerKeyClaim.Value,
                    Email = identity.FindFirstValue(ClaimTypes.Email),
                    FirstName = identity.FindFirstValue(ClaimTypes.GivenName),
                    LastName = identity.FindFirstValue(ClaimTypes.Surname)
                };
            }
コード例 #12
0
        public static ExternalLoginModel FromIdentity(ClaimsIdentity identity)
        {
            if (identity == null)
            {
                return null;
            }

            var idClaim = identity.FindFirst(ClaimTypes.NameIdentifier) ??
                          identity.FindFirst(OAuthClaimsParser.ClaimTypeUid);

            if (!IsOk(idClaim))
                return null;

            var result = new ExternalLoginModel();
            result.IsRegistered = (idClaim.Issuer == ClaimsIdentity.DefaultIssuer);

            ExternalLoginType loginProvider;
            if (!Enum.TryParse(idClaim.OriginalIssuer, true, out loginProvider))
                return null;
            result.Provider = loginProvider;

            if (identity.AuthenticationType == DefaultAuthenticationTypes.ExternalBearer)
            {
                var parser = OAuthClaimsParserFactory.Create(loginProvider, identity);

                result.ProviderKey = parser.GetProviderKey();
                result.Email = parser.GetEmail();
                result.FirstName = parser.GetFirstName();
                result.LastName = parser.GetLasttName();
                result.AvatarUrl = parser.GetAvatarUrl();
            }
            else
            {
                result.ProviderKey = identity.FindFirstValue(ClaimTypes.Sid);
                result.Email = identity.FindFirstValue(ClaimTypes.Email);
                result.FirstName = identity.FindFirstValue(ClaimTypes.GivenName);
                result.LastName = identity.FindFirstValue(ClaimTypes.Surname);
                result.AvatarUrl = identity.FindFirstValue(OAuthClaimsParser.ClaimTypeAvatarUrl);
            }
            return result;
        }
コード例 #13
0
ファイル: AccountController.cs プロジェクト: flyeven/AngJobs
            public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
            {
                if (identity == null)
                {
                    return null;
                }

                Claim providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);


                if (providerKeyClaim == null || String.IsNullOrEmpty(providerKeyClaim.Issuer) || String.IsNullOrEmpty(providerKeyClaim.Value))
                {
                    return null;
                }

                if (providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
                {
                    return null;
                }

                string userId = string.Empty;

                if (providerKeyClaim.Issuer.Equals(Stripe, StringComparison.InvariantCultureIgnoreCase))
                    userId = identity.FindFirst("urn:stripe:account:id").Value;
                else
                    userId = providerKeyClaim.Value;

                if (String.IsNullOrEmpty(userId))
                    return null;
                return new ExternalLoginData
                {
                    LoginProvider = providerKeyClaim.Issuer,
                    ProviderKey = userId,
                    UserName = identity.FindFirstValue(ClaimTypes.Name),
                    ExternalAccessToken = identity.FindFirstValue("ExternalAccessToken"),
                };
            }
コード例 #14
0
ファイル: AccountController.cs プロジェクト: Jaecen/Peregrine
			public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
			{
				if(identity == null)
					return null;

				var providerKeyClaim = identity.FindFirst(ClaimTypes.NameIdentifier);

				if(providerKeyClaim == null
					|| String.IsNullOrEmpty(providerKeyClaim.Issuer)
					|| String.IsNullOrEmpty(providerKeyClaim.Value))
				{
					return null;
				}

				if(providerKeyClaim.Issuer == ClaimsIdentity.DefaultIssuer)
					return null;

				return new ExternalLoginData(
					loginProvider: providerKeyClaim.Issuer,
					providerKey: providerKeyClaim.Value,
					userName: identity.FindFirstValue(ClaimTypes.Name),
					externalAccessToken: identity.FindFirstValue("ExternalAccessToken"),
					email: identity.FindFirstValue(ClaimTypes.Email));
			}
コード例 #15
0
 public static ExternalLoginData FromIdentity(ClaimsIdentity identity)
 {
     if (identity == null)
         return null;
     var first = identity.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier");
     if (first == null || string.IsNullOrEmpty(first.Issuer) || string.IsNullOrEmpty(first.Value))
         return null;
     if (first.Issuer == "LOCAL AUTHORITY")
         return null;
     return new ExternalLoginData
            {
         LoginProvider = first.Issuer,
         ProviderKey = first.Value,
         UserName = identity.FindFirstValue("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"),
         ExternalAccessToken = identity.FindFirstValue("ExternalAccessToken")
     };
 }