public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) { try { IIdentityManager identityManager = _identityManagerFactory.Invoke(); if (identityManager == null) { throw new NullReferenceException($"{nameof(identityManager)} can not be found!"); } User user = await identityManager.FindAsync(context.UserName, context.Password); if (user == null) { context.SetError(INVALID_GRANT, "Invalid username and password"); return; } ICollection <string> inRoles = await identityManager.GetRolesAsync(user.Id); // oAuth var oAuthIdentity = ClaimsIdentityFactory.Create(user, OAuthDefaults.AuthenticationType, inRoles.ToArray()); AuthenticationProperties properties = CreateProperties(); properties.Dictionary.Add("as:client_id", (context.ClientId == null) ? string.Empty : context.ClientId); properties.Dictionary.Add("username", context.UserName); var ticket = new AuthenticationTicket(oAuthIdentity, properties); context.Validated(ticket); } catch (Exception ex) { // TODO: some error logging throw; } }