Войдите в систему с помощью веб-API, используя аутентификацию на основе токенов(JWT). В ASP.NET MVC
Это мой класс statrup
public partial class Startup { public void Configuration(IAppBuilder app) { HttpConfiguration config = new HttpConfiguration(); ConfigureOAuth(app); WebApiConfig.Register(config); app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); app.UseWebApi(config); } //private void ConfigureAuth(IAppBuilder app) //{ // throw new NotImplementedException(); //} 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()); } }
Это мой класс AuthRepositry
public class AuthRepository : IDisposable { private MobileAppEntities _ctx; private UserManager<ApplicationUser> _userManager;// UserManager { get { return _userManager; } private set { } } public AuthRepository() { _ctx = new MobileAppEntities(); _userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(_ctx)); } public async Task<IdentityUser> FindUser(string userName, string password) { IdentityUser user = await _userManager.FindAsync(userName, password); return user; } public void Dispose() { _ctx.Dispose(); _userManager.Dispose(); } }
Это один класс поставщика сервера авторизации
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider { private ApplicationUserManager _userManager; 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[] { "*" }); using (AuthRepository _repo = new AuthRepository()) { IdentityUser user = await _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); } }
Что я уже пробовал:
Каждый раз, когда я отправляю запрос от почтальона, он выдает такую ошибку
Ошибка
{
"ошибки": "unsupported_grant_type"
}
Vincent Maverick Durano
Можешь показать нам свой локон, который ты использовал в "почтальоне"?
Aitzaz Ahsan
вы можете увидеть мой запрос почтальона по ссылке
https://ibb.co/pz9ZZ0k
Richard Deeming
Ошибка в снимке экрана не соответствует ошибке в вашем вопросе.
Vincent Maverick Durano
Как уже упоминалось, ошибка отличалась от первоначального вопроса. Что касается ошибки в ссылке, то она, похоже, ваша user
объект есть null
Проверьте имя пользователя и пароль, отладив свой код.