Явная проверка маркера

Я разрабатываю проект App2 для веб-сайтов Asp.net, и я использую OAuth. Теперь я могу сгенерировать токен и отправить его клиенту. Теперь, как я пошлю этот токен на сервер от клиента, используя jQuery ajax-вызов, и явным образом проверил этот токен и получил информацию о пользователе. Я не использую идентификатор asp.net.

Код

public class UserModel
{ 
 public string UserName { get; set; }
 public string Password { get; set; } 
 public string ConfirmPassword { get; set; }
}

public class Startup
{
 public void Configuration(IAppBuilder app)
 {
 app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
 ConfigureOAuth(app);
 HttpConfiguration config = new HttpConfiguration();
 WebApiConfig.Register(config); 
 app.UseWebApi(config);
 }

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

 // Token Generation
 app.UseOAuthAuthorizationServer(OAuthServerOptions);
 app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

 }
}

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider
{ 
 public override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
 {
 // Resource owner password credentials does not provide a client ID.
 if (context.ClientId == null)
 {
 context.Validated();
 }

 return Task.FromResult<object>(null);
 }

 public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
 {
 using (AuthRepository _repo = new AuthRepository())
 {
 var user = _repo.FindUser(context.UserName, context.Password);

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

 var identity = new ClaimsIdentity(context.Options.AuthenticationType);
 identity.AddClaim(new Claim("sub", context.UserName));
 identity.AddClaim(new Claim("role", "user"));

 context.Validated(identity);

 }
}
 </object>
1 ответ

Вам не нужно и не нужно проверять маркер вручную, просто привяжите защищенную конечную точку API с атрибутом [Authorize] и оставьте это подтверждение в рамках фреймворка, если токен недействителен или истек. Веб-API вернет 401, и вам хорошо идти,

Что касается отправки вашего полученного токена из клиентского приложения на сервер, вам необходимо отправить токен в заголовок авторизации для вашего запроса с помощью схемы Authorization: Bearer xf7jsjaaa9292....

Что-то вроде ниже поможет

beforeSend: function (xhr) {
 xhr.setRequestHeader ("Authorization", "Bearer YOUR_TOKEN_GOES_HERE");
}

Таким образом, вы можете использовать jQuery beforeSend для добавления заголовка HTTP-авторизации.

Кстати, я думаю, что пример кода из моего блога http://bitoftech.net, поэтому не стесняйтесь удалять приведенные ниже утверждения, так как это не полезно для вашего дела:

identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim("role", "user"));

И замените его на это:

identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));

licensed under cc by-sa 3.0 with attribution.