private static void GrantResourceOwnerCredentials(
            BaseValidatingTicketContext <OAuthAuthorizationServerOptions> context,
            SignInStatus status,
            ClaimsIdentity user,
            string clientId)
        {
            if (status == SignInStatus.Success)
            {
                var identity = new ClaimsIdentity("JWT");
                identity.AddClaim(new Claim(JwtRegisteredClaimNames.Sub, user.Name));
                // identity.AddClaim(new Claim(ClaimTypes.Sid, user.Id));

                identity.AddClaims(
                    from claim in user.Claims
                    where
                    string.Equals(claim.Type, ClaimTypes.Role, StringComparison.OrdinalIgnoreCase)
                    //  ||
                    //  claim.ClaimType.Contains(SecurityExtensions.PermissionClaimTypePrefix)
                    select new Claim(claim.Type, claim.Value));

                var props =
                    new AuthenticationProperties(
                        new Dictionary <string, string> {
                    { "audience", clientId ?? string.Empty }
                });

                var ticket = new AuthenticationTicket(identity, props);
                context.Validated(ticket);
            }
            else
            {
                switch (status)
                {
                case SignInStatus.Failure:
                    context.SetError("invalid_grant", "The user name or password is incorrect");
                    break;

                case SignInStatus.LockedOut:
                    context.SetError("invalid_grant.locked", "The user account is locked");
                    break;

                case SignInStatus.RequiresVerification:
                    context.SetError("invalid_grant.unverified", "The user account requires verification");
                    break;

                default:
                    context.SetError("invalid_grant.error", "Unexpected failure. SignIn status: " + status);
                    break;
                }
            }
        }
 private static void VerifyAuthentication(BaseValidatingTicketContext <OAuthAuthorizationServerOptions> context, AuthenticatedUser response)
 {
     if (response != null && response.UserName != EmailAddress.Empty)
     {
         BuildToken(context, response);
     }
     else
     {
         context.SetError("Autorization Error", "The username or password is incorrect!");
         context.Response.Headers.Add("AuthorizationResponse", new[] { "401" });
     }
 }
Example #3
0
        private async Task CreateAuthenticationSignInInfo(BaseValidatingTicketContext <OAuthAuthorizationServerOptions> context, Formular.BaaS.Domain.User baasUser)
        {
            using (UserManager <ApplicationUser, int> userManager = _userManagerFactory())
            {
                var user = new ApplicationUser(baasUser);

                if (user == null)
                {
                    context.SetError("invalid_grant", "The user name or password is incorrect.");
                    return;
                }

                ClaimsIdentity oAuthIdentity = await userManager.CreateIdentityAsync(user,
                                                                                     context.Options.AuthenticationType);

                ClaimsIdentity cookiesIdentity = await userManager.CreateIdentityAsync(user,
                                                                                       CookieAuthenticationDefaults.AuthenticationType);

                AuthenticationProperties properties = CreateProperties(user.UserName);
                AuthenticationTicket     ticket     = new AuthenticationTicket(oAuthIdentity, properties);
                context.Validated(ticket);
                context.Request.Context.Authentication.SignIn(cookiesIdentity);
            }
        }