Токен на предъявителя: какой тип ClaimsIdentity должен использоваться в GrantResourceOwnerCredentials?

Это мой сценарий:

Я создаю приложение ASP Net MVC, которое взаимодействует с WebApi. Иногда мне нужен WebApiClient для получения данных с контроллеров WebApi. Чтобы авторизовать мой WebApiClient с использованием учетных данных текущего зарегистрированного пользователя, я хочу использовать токены доступа с OAuth2.

Моя идея состояла в том, чтобы сгенерировать токен при входе в систему и добавить сгенерированный токен в Заявку. Для этого в AccountController:

Login(LoginViewModel model){
[...]

var signinm = HttpContext.GetOwinContext().Get<ApplicationSignInManager>();                    
var ident = signinm.CreateUserIdentity(user);
//Generate token 
BearerToken token = await (new TokenApi()).GetToken(model.UserName, model.Password);

//Store generated token in a claim
ident.AddClaim(new Claim(WebApiClient.API_TOKEN_KEY, 
Newtonsoft.Json.JsonConvert.SerializeObject(token)));

[…]
//Finally sign in
HttpContext.GetOwinContext().Authentication.SignIn(authProp, ident);

}

Мои основные вопросы касаются метода GrantResourceOwnerCredentials в ApplicationOAuthProvider:

public class ApplicationOAuthProvider : OAuthAuthorizationServerProvider
{
[...]
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
    {
        var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

        ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

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

         ClaimsIdentity identity = await userManager.CreateIdentityAsync(
                                            user,
                                            DefaultAuthenticationTypes.ExternalBearer);

        AuthenticationProperties properties = CreateProperties(user.UserName);

        AuthenticationTicket ticket = new AuthenticationTicket(identity, properties);
        context.Validated(ticket);

    }

[...]
}
  1. Должен ли я генерировать это утверждение, и с каким типом DefaultAuthenticationTypes: Cookie или ExternalBearer? Оба, кажется, работают.
  2. Так как HttpContext.GetOwinContext().Authentication.SignIn(...) уже выполнен при входе в систему, нет необходимости входить в систему также в GrantResourceOwnerCredentials, я не прав?

Спасибо за помощь.

0 ответов

Другие вопросы по тегам