Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- [HttpPost]
- public async Task Token([FromBody] Person person)
- {
- var username = person.Login;
- var password = person.Password;
- var identity = GetIdentity(username, password);
- if (identity == null)
- {
- Response.StatusCode = 400;
- await Response.WriteAsync("Invalid username or password.");
- return;
- }
- var now = System.DateTime.UtcNow;
- // создаем JWT-токен
- var jwt = new JwtSecurityToken(
- issuer: AuthOptions.ISSUER,
- audience: AuthOptions.AUDIENCE,
- notBefore: now,
- claims: identity.Claims,
- expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
- signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256));
- var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
- var response = new
- {
- access_token = encodedJwt,
- username = identity.Name
- };
- // сериализация ответа
- Response.ContentType = "application/json";
- await Response.WriteAsync(JsonConvert.SerializeObject(response, new JsonSerializerSettings { Formatting = Formatting.Indented }));
- }
- private ClaimsIdentity GetIdentity(string username, string password)
- {
- Person person = _context.Persons.FirstOrDefault(x => x.Login == username && x.Password == password);
- if (person != null)
- {
- var claims = new List<Claim>
- {
- new Claim(ClaimsIdentity.DefaultNameClaimType, person.Login),
- new Claim(ClaimsIdentity.DefaultRoleClaimType, person.Role)
- };
- ClaimsIdentity claimsIdentity =
- new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType,
- ClaimsIdentity.DefaultRoleClaimType);
- return claimsIdentity;
- }
- // если пользователя не найдено
- return null;
- }
- services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
- .AddJwtBearer(options =>
- {
- options.RequireHttpsMetadata = false;
- options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
- {
- // укзывает, будет ли валидироваться издатель при валидации токена
- ValidateIssuer = true,
- // строка, представляющая издателя
- ValidIssuer = AuthOptions.ISSUER,
- // будет ли валидироваться потребитель токена
- ValidateAudience = true,
- // установка потребителя токена
- ValidAudience = AuthOptions.AUDIENCE,
- // будет ли валидироваться время существования
- ValidateLifetime = true,
- // установка ключа безопасности
- IssuerSigningKey = AuthOptions.GetSymmetricSecurityKey(),
- // валидация ключа безопасности
- ValidateIssuerSigningKey = true,
- };
- });
- login() {
- this.loading = true;
- this.authenticationService.login(this.model.username, this.model.password)
- .subscribe(result => {
- if (result === true) {
- this.router.navigate(['/']);
- } else {
- this.error = 'Username or password is incorrect';
- this.loading = false;
- }
- });
- }
- login(username: string, password: string): Observable<boolean> {
- console.log(JSON.stringify({ Login: username, password: password }));
- return this.http.post('api/account', JSON.stringify({ Login: username, password: password}))
- .map((response: Response) => {
- console.log(response.json.toString());
- return true;
- });
- }
Add Comment
Please, Sign In to add comment