2014-06-25 86 views
7

Bir Web API sitesi temin ediyorum ve ben jeton kullanmak istiyorum. Ancak, bir kullanıcı tablosu olan ve her kullanıcının zaten onlar için oluşturulmuş ve tabloda depolanmış bir belirteci olan eski bir veritabanı ile çalışıyorum.Web API Taşıyıcı jetonları - özel jetonları kullanabilir miyim?

  1. bir jetonu verilmesi bu sadece bu kullanıcı için belirteç döndürür yüzden, ben Kimlik OAuth hamiline belirteç kimlik doğrulama bit kullanabilirsiniz eğer egzersiz, ancak mevcut veritabanına hepsini takın çalışıyorum db ben db yukarı bakarak ve kullanıcıdan bir kimlik oluşturarak belirteci doğrulayabilir

(Ben şeylerin MVC tarafı için sitedeki başka ASP.NET kimlik kullanıyorum) Bunun mümkün olup olmayacağını veya çalışmam gerekirse çalışamam. e-posta alıp standart bir HTTP işleyici yaklaşımı kullanın. Şimdiye kadar çalışmam gerekenleri değil, standart belirteçler veren, şimdiye kadarki standart kodum. Kendi sorumu yanıtlayan

OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
{ 
    AllowInsecureHttp = true, 
    TokenEndpointPath = new PathString("/token"), 
    AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
    Provider = new SimpleAuthorizationServerProvider() 
}; 

// Token Generation 
app.UseOAuthAuthorizationServer(OAuthServerOptions); 

var bearerAuth = new OAuthBearerAuthenticationOptions() 
{ 
    Provider = new OAuthBearerAuthenticationProvider() 
}; 

app.UseOAuthBearerAuthentication(bearerAuth); 


public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider 
{ 


    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
    { 
     context.Validated(); 
    } 

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 

     context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 

     var manager = new UserManager<User, long>(new UserStore(new UserRepository())); 
     var user = await manager.FindAsync(context.UserName, context.Password); 

     if (user == null) 
     { 
      context.SetError("invalid_grant", "The user name or password is incorrect."); 
     } 
     else 
     { 
      var identity = new ClaimsIdentity(context.Options.AuthenticationType); 
      identity.AddClaim(new Claim("name",user.Email)); 
      context.Validated(identity); 
     } 


    } 
} 

cevap

İlgili konular