/// <summary> /// Adds claims based on the UserData data /// </summary> private void AddUserDataClaims() { //This is the id that 'identity' uses to check for the user id if (HasClaim(x => x.Type == ClaimTypes.NameIdentifier) == false) { AddClaim(new Claim(ClaimTypes.NameIdentifier, UserData.Id.ToString(), ClaimValueTypes.Integer32, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == ClaimTypes.Name) == false) { AddClaim(new Claim(ClaimTypes.Name, UserData.Username, ClaimValueTypes.String, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == ClaimTypes.GivenName) == false) { AddClaim(new Claim(ClaimTypes.GivenName, UserData.RealName, ClaimValueTypes.String, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == Constants.Security.StartContentNodeIdClaimType) == false) { AddClaim(new Claim(Constants.Security.StartContentNodeIdClaimType, StartContentNode.ToInvariantString(), ClaimValueTypes.Integer32, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == Constants.Security.StartMediaNodeIdClaimType) == false) { AddClaim(new Claim(Constants.Security.StartMediaNodeIdClaimType, StartMediaNode.ToInvariantString(), ClaimValueTypes.Integer32, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == ClaimTypes.Locality) == false) { AddClaim(new Claim(ClaimTypes.Locality, Culture, ClaimValueTypes.String, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == Constants.Security.SessionIdClaimType) == false && SessionId.IsNullOrWhiteSpace() == false) { AddClaim(new Claim(Constants.Security.SessionIdClaimType, SessionId, ClaimValueTypes.String, Issuer, Issuer, this)); //The security stamp claim is also required... this is because this claim type is hard coded // by the SecurityStampValidator, see: https://katanaproject.codeplex.com/workitem/444 if (HasClaim(x => x.Type == Microsoft.AspNet.Identity.Constants.DefaultSecurityStampClaimType) == false) { AddClaim(new Claim(Microsoft.AspNet.Identity.Constants.DefaultSecurityStampClaimType, SessionId, ClaimValueTypes.String, Issuer, Issuer, this)); } } //Add each app as a separate claim if (HasClaim(x => x.Type == Constants.Security.AllowedApplicationsClaimType) == false) { foreach (var application in AllowedApplications) { AddClaim(new Claim(Constants.Security.AllowedApplicationsClaimType, application, ClaimValueTypes.String, Issuer, Issuer, this)); } } //Claims are added by the ClaimsIdentityFactory because our UserStore supports roles, however this identity might // not be made with that factory if it was created with a FormsAuthentication ticket so perform the check if (HasClaim(x => x.Type == DefaultRoleClaimType) == false) { //manually add them based on the UserData foreach (var roleName in UserData.Roles) { AddClaim(new Claim(RoleClaimType, roleName, ClaimValueTypes.String, Issuer, Issuer, this)); } } }
/// <summary> /// Adds claims based on the UserData data /// </summary> private void AddUserDataClaims() { //This is the id that 'identity' uses to check for the user id if (HasClaim(x => x.Type == ClaimTypes.NameIdentifier) == false) { AddClaim(new Claim(ClaimTypes.NameIdentifier, UserData.Id.ToString(), ClaimValueTypes.Integer32, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == ClaimTypes.Name) == false) { AddClaim(new Claim(ClaimTypes.Name, UserData.Username, ClaimValueTypes.String, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == ClaimTypes.GivenName) == false) { AddClaim(new Claim(ClaimTypes.GivenName, UserData.RealName, ClaimValueTypes.String, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == Constants.Security.StartContentNodeIdClaimType) == false) { AddClaim(new Claim(Constants.Security.StartContentNodeIdClaimType, StartContentNode.ToInvariantString(), ClaimValueTypes.Integer32, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == Constants.Security.StartMediaNodeIdClaimType) == false) { AddClaim(new Claim(Constants.Security.StartMediaNodeIdClaimType, StartMediaNode.ToInvariantString(), ClaimValueTypes.Integer32, Issuer, Issuer, this)); } if (HasClaim(x => x.Type == ClaimTypes.Locality) == false) { AddClaim(new Claim(ClaimTypes.Locality, Culture, ClaimValueTypes.String, Issuer, Issuer, this)); } ////TODO: Not sure why this is null sometimes, it shouldn't be. Somewhere it's not being set /// I think it's due to some bug I had in chrome, we'll see //if (UserData.SessionId.IsNullOrWhiteSpace()) //{ // UserData.SessionId = Guid.NewGuid().ToString(); //} if (HasClaim(x => x.Type == Constants.Security.SessionIdClaimType) == false) { AddClaim(new Claim(Constants.Security.SessionIdClaimType, SessionId, ClaimValueTypes.String, Issuer, Issuer, this)); } //Add each app as a separate claim if (HasClaim(x => x.Type == Constants.Security.AllowedApplicationsClaimType) == false) { foreach (var application in AllowedApplications) { AddClaim(new Claim(Constants.Security.AllowedApplicationsClaimType, application, ClaimValueTypes.String, Issuer, Issuer, this)); } } //Claims are added by the ClaimsIdentityFactory because our UserStore supports roles, however this identity might // not be made with that factory if it was created with a FormsAuthentication ticket so perform the check if (HasClaim(x => x.Type == DefaultRoleClaimType) == false) { //manually add them based on the UserData foreach (var roleName in UserData.Roles) { AddClaim(new Claim(RoleClaimType, roleName, ClaimValueTypes.String, Issuer, Issuer, this)); } } }