Guest User

Untitled

a guest
Dec 25th, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.24 KB | None | 0 0
  1. [HttpPost]
  2. public async Task Token([FromBody] Person person)
  3. {
  4. var username = person.Login;
  5. var password = person.Password;
  6.  
  7. var identity = GetIdentity(username, password);
  8. if (identity == null)
  9. {
  10. Response.StatusCode = 400;
  11. await Response.WriteAsync("Invalid username or password.");
  12. return;
  13. }
  14.  
  15. var now = System.DateTime.UtcNow;
  16. // создаем JWT-токен
  17. var jwt = new JwtSecurityToken(
  18. issuer: AuthOptions.ISSUER,
  19. audience: AuthOptions.AUDIENCE,
  20. notBefore: now,
  21. claims: identity.Claims,
  22. expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
  23. signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256));
  24. var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
  25.  
  26. var response = new
  27. {
  28. access_token = encodedJwt,
  29. username = identity.Name
  30. };
  31.  
  32. // сериализация ответа
  33. Response.ContentType = "application/json";
  34. await Response.WriteAsync(JsonConvert.SerializeObject(response, new JsonSerializerSettings { Formatting = Formatting.Indented }));
  35. }
  36.  
  37. private ClaimsIdentity GetIdentity(string username, string password)
  38. {
  39. Person person = _context.Persons.FirstOrDefault(x => x.Login == username && x.Password == password);
  40. if (person != null)
  41. {
  42. var claims = new List<Claim>
  43. {
  44. new Claim(ClaimsIdentity.DefaultNameClaimType, person.Login),
  45. new Claim(ClaimsIdentity.DefaultRoleClaimType, person.Role)
  46. };
  47. ClaimsIdentity claimsIdentity =
  48. new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType,
  49. ClaimsIdentity.DefaultRoleClaimType);
  50. return claimsIdentity;
  51. }
  52.  
  53. // если пользователя не найдено
  54. return null;
  55. }
  56.  
  57. services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
  58. .AddJwtBearer(options =>
  59. {
  60. options.RequireHttpsMetadata = false;
  61. options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
  62. {
  63. // укзывает, будет ли валидироваться издатель при валидации токена
  64. ValidateIssuer = true,
  65. // строка, представляющая издателя
  66. ValidIssuer = AuthOptions.ISSUER,
  67.  
  68. // будет ли валидироваться потребитель токена
  69. ValidateAudience = true,
  70. // установка потребителя токена
  71. ValidAudience = AuthOptions.AUDIENCE,
  72. // будет ли валидироваться время существования
  73. ValidateLifetime = true,
  74.  
  75. // установка ключа безопасности
  76. IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
  77. // валидация ключа безопасности
  78. ValidateIssuerSigningKey = true,
  79. };
  80. });
  81.  
  82. login() {
  83. this.loading = true;
  84. this.authenticationService.login(this.model.username, this.model.password)
  85. .subscribe(result => {
  86. if (result === true) {
  87. this.router.navigate(['/']);
  88. } else {
  89. this.error = 'Username or password is incorrect';
  90. this.loading = false;
  91. }
  92. });
  93. }
  94.  
  95. login(username: string, password: string): Observable<boolean> {
  96. console.log(JSON.stringify({ Login: username, password: password }));
  97. return this.http.post('api/account', JSON.stringify({ Login: username, password: password}))
  98. .map((response: Response) => {
  99.  
  100. console.log(response.json.toString());
  101. return true;
  102.  
  103. });
  104. }
Add Comment
Please, Sign In to add comment