'da OAuth Bearer Jetonları Üretimi ve Owin'i kullanarak istemciye daha fazla bilgi döndürün Bir WebApi ve bir Cordova uygulaması oluşturdum. Cordova uygulaması ve WebApi arasında iletişim kurmak için http istekleri kullanıyorum. WebApi'de, OAuth Bearer Tokens Generation'ı uyguladık.WebApi
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());
}
ve bu, ben sorundur aşağıdaki json
{"access_token":"some token","token_type":"bearer","expires_in":86399}
almak Cordova uygulamasından API başarılı giriş isteğinden sonra SimpleAuthorizationServerProvider
uygulanması
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);
}
içindedir Kullanıcı hakkında daha fazla bilgiye ihtiyacım var. Örneğin, veritabanında bir UserGuid alanı var ve giriş başarılı olduğunda ve daha sonra diğer isteklerde kullanmak için Cordova uygulamasına göndermek istiyorum. "access_token", "token_type"
ve "expires_in"
dışındaki bir kullanıcıya geri dönmek için başka bilgiler ekleyebilir miyim? Değilse, kullanıcıyı API'da access_token
'u temel alarak nasıl edinebilirim?
DÜZENLEME:
Ben geçici bir çözüm buldu düşünüyorum. Ben GrantResourceOwnerCredentials
identity.AddClaim(new Claim(ClaimTypes.Name, user.UserGuid.ToString()));
içine aşağıdaki kodu eklenmiş ve bundan sonra böyle benim Kontrolörün içinde guid erişmek: Ben de özel bir ad identity.AddClaim(new Claim("guid", user.UserGuid.ToString()));
Birlikte guid ekleyebilir User.Identity.Name
Taşıyıcı jeton JSON ile müşteriye daha fazla veri döndürmenin bir yolu olup olmadığını bilmek istiyorum.
Cevabınız için teşekkür ederiz. API'yı yazdığımda, aynı makaleyi reddediyorum, hatta kodu indirdim ve çukura gittim. Bu yüzden “AuthenticationProperties” kullanmayı denedim, ancak sonuç aynıydı. İstemci tarafında hala sadece "access_token", "token_type" ve "expires_in" özelliklerini alıyorum. –
Çözümümü bu projede test ettim ve işe yarıyor. Neler olduğunu görmek için kemancı gibi bir sniffer kullanıyor musunuz? – LeftyX
Evet. Fiddler kullanıyorum ve aynı zamanda API’yi de ayıklamıyorum, ancak sonuç hala aynı. –