Weitere Informationen mit OAuth Bearer Tokens Generation und Owin in WebApi an den Client zurückgeben
Ich habe ein WebApi und eine Cordova-Anwendung erstellt. Ich verwende HTTP-Anforderungen, um zwischen der Cordova-Anwendung und der WebAPI zu kommunizieren. In der WebAPI habe ich OAuth Bearer Token Generation implementiert.
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());
}
und das ist in derSimpleAuthorizationServerProvider
Implementierun
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);
}
Nach einer erfolgreichen Anmeldeanforderung der Cordova-App an die API erhalte ich den folgenden JSON
{"access_token":"some token","token_type":"bearer","expires_in":86399}
Das Problem ist, dass ich mehr Informationen über den Benutzer benötige. Ich habe beispielsweise ein UserGuid-Feld in der Datenbank und möchte es bei erfolgreicher Anmeldung an die Cordova-App senden und später bei anderen Anforderungen verwenden. Kann ich andere Informationen als @ angeben, um sie an den Client zurückzugebe"access_token", "token_type"
und"expires_in"
? Wenn nicht, wie kann ich den Benutzer anhand des @ in die API einbindeaccess_token
?
BEARBEITEN
Ich denke, dass ich eine Problemumgehung gefunden habe. Ich habe den folgenden Code in @ eingefüGrantResourceOwnerCredentials
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserGuid.ToString()));
und danach greife ich wie folgt auf die GUID in meinem Controller zu:User.Identity.Name
Ich kann auch die guid mit einem benutzerdefinierten Namen hinzufügenidentity.AddClaim(new Claim("guid", user.UserGuid.ToString()));
Ich bin immer noch daran interessiert zu wissen, ob es eine Möglichkeit gibt, mit dem Inhaber-Token JSON weitere Daten an den Client zurückzugeben.