Верните больше информации клиенту, используя OAuth Bearer Tokens Generation и Owin в WebApi
Я создал приложение WebApi и Cordova. Я использую HTTP-запросы для связи между приложением Cordova и WebAPI. В WebAPI я реализовал генерацию токенов носителя OAuth.
public void ConfigureOAuth(IAppBuilder app)
{
var oAuthServerOptions = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new SimpleAuthorizationServerProvider(new UserService(new Repository<User>(new RabbitApiObjectContext()), new EncryptionService()))
};
// Token Generation
app.UseOAuthAuthorizationServer(oAuthServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
}
и это внутриSimpleAuthorizationServerProvider
реализация
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
// A little hack. context.UserName contains the email
var user = await _userService.GetUserByEmailAndPassword(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "Wrong email or password.");
return;
}
var identity = new ClaimsIdentity(context.Options.AuthenticationType);
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));
context.Validated(identity);
}
после успешного запроса входа в API из приложения Cordova я получаю следующий JSON
{"access_token":"some token","token_type":"bearer","expires_in":86399}
Проблема в том, что мне нужно больше информации о пользователе. Например, у меня есть поле UserGuid в базе данных, и я хочу отправить его в приложение Cordova после успешного входа в систему и использовать его позже в других запросах. Могу ли я включить другую информацию для возврата клиенту, кроме"access_token", "token_type"
а также"expires_in"
? Если нет, как я могу получить пользователя в API на основеaccess_token
?
РЕДАКТИРОВАТЬ:
Я думаю, что я нашел обходной путь. Я добавил следующий код внутриGrantResourceOwnerCredentials
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserGuid.ToString()));
и после этого я получаю доступ к GUID внутри моего контроллера следующим образом:User.Identity.Name
Я также могу добавить руководство с пользовательским именемidentity.AddClaim(new Claim("guid", user.UserGuid.ToString()));
Мне все еще интересно узнать, есть ли способ вернуть больше данных клиенту с токеном-носителем JSON.