public Identity GetIdentity(HttpRequestMessage request, IPrincipal user, bool isPublicClient) { var userId = controllerHelper.GetCurrentUserId(); var claims = authenticationHelper.GetClaimsForRequest(user, request); if (!HasValidMandant(claims)) { Log.Warning("User hat noch keinen Antrag gestellt"); throw new AuthenticationException("User hat noch keinen Antrag gestellt"); } var isNewUser = !TryUpdateUser(userId, claims); if (isNewUser) { return(new Identity { IssuedClaims = claims.ToArray(), Roles = new[] { isPublicClient ? controllerHelper.IsInternalUser() ? AccessRoles.RoleBVW : AccessRoles.RoleOe2 : controllerHelper.GetMgntRoleFromClaim() }, IssuedAccessTokens = new string[] { }, AuthStatus = AuthStatus.NeuerBenutzer, RedirectUrl = GetReturnUrl(AuthStatus.NeuerBenutzer, isPublicClient) }); } var role = isPublicClient ? userDataAccess.GetRoleForClient(userId) : userDataAccess.GetEiamRoles(userId); var authStatus = IsValidAuthRole(role, isPublicClient); // Fehlerhafte Rolle oder Anmeldung if (authStatus == AuthStatus.KeineRolleDefiniert) { Log.Error( "Es wurde für den Benutzer keine Rolle definiert in der Datenbank oder Authentifikation hat fehlgeschlagen UserId:={UserId}, AuthStatus={AuthStatus}", userId, authStatus); throw new AuthenticationException( $"Es wurde für den Benutzer keine Rolle definiert in der Datenbank oder Authentifikation hat fehlgeschlagen UserId:={userId}, AuthStatus='{authStatus}'"); } var accessTokens = userDataAccess.GetTokensDesUser(userId); var identity = new Identity { IssuedClaims = claims.ToArray(), Roles = new[] { role }, IssuedAccessTokens = accessTokens, AuthStatus = authStatus, RedirectUrl = GetReturnUrl(authStatus, isPublicClient) }; AddAppRolesAndFeatures(userId, identity); try { Log.Debug("(AuthController:GetClaims()): {CLAIMS}", JsonConvert.SerializeObject(identity, Formatting.Indented)); } catch { // ignored } return(identity); }