Мы пытаемся реализовать проект веб-API с идентификаторами OWIN и .Net для аутентификации. У нас есть пользовательские таблицы базы данных для пользователей и ролей, поэтому нам нужно принять первый подход к базе данных для EF.База данных идентификаторов ASP.NET Первый пользовательский пользователь и его роль
мне удалось получить Идентичность работать с нашими таблицами пользовательских учетных записей (благодаря другим StackOverflow нитей), но я застрял на получение роли работать ...
В общем, что я сделал до сих пор реализован пользовательский IUserStore с помощью следующей функции
public class IdentityUserStore<TUser> :
IUserStore<TUser>, where TUser : IdentityUser
{
....
public Task<TUser> FindByNameAsync(string userName)
{
//throw new NotImplementedException();
IdentityUser user = null;
Account result = _accountRepo.GetByEmail(userName);
if (result != null)
{
user = new IdentityUser()
{
Id = result.Code,
UserName = result.Email,
SecurityStamp = result.SecurityStamp,
PasswordHash = result.PasswordHash,
};
}
return Task.FromResult<TUser>(user as TUser);
}
....
}
** Обратите внимание на сущности счетов не унаследовала IUser поэтому мне пришлось вручную сопоставить минимальные данные, необходимые для IdentityUser.
И затем переопределить функцию GrantResourceOwnerCredentials следующим
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
UserManager<IdentityUser> _userManager = new UserManager<IdentityUser>(new IdentityUserStore<IdentityUser>());
IdentityUser user = await _userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));
context.Validated(identity);
}
С выше [Авторизоваться] атрибут работы, но мы не можем получить [Авторизовать (Roles = «XXX»)], так как информация о роли не доступна.
Может ли кто-нибудь помочь мне указать направление вправо на получение пользовательских ролей из пользовательских таблиц базы данных, чтобы он работал с картой .Net Identity?
Спасибо!
благодарит за помощь! – ttts862