У меня есть система аутентификации JWT со службой gRPC в .NET и кольцевой на стороне клиента.
Кажется, все в порядке, за исключением того, что я не могу хранить свой токен в localStorage на стороне клиента, Я получил токен из бэкэнда, но всякий раз, когда я пытался установить его в localStorage, я получал токен как неопределенный
это мой бэкэнд службы gRPC:
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;
public class TokenService : ITokenService {
private readonly IConfiguration _configuration;
public TokenService(IConfiguration configuration) {
_configuration = configuration;
}
public string GenerateToken( string username, string email) {
var claims = new[] {
new Claim(JwtRegisteredClaimNames.Sub, username),
new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
};
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"]));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken(
issuer: _configuration["Jwt:Issuer"],
audience: _configuration["Jwt:Audience"],
claims: claims,
expires: DateTime.Now.AddDays(10),
signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
}
Должен отметить, что вроде бы все в порядке, даже я протестировал свою службу grpc с помощью Bloomrpc, и она генерировала новые токены
при необходимости запросите у меня дополнительный код.
У меня есть система аутентификации JWT со службой gRPC в .NET и кольцевой на стороне клиента. Кажется, все в порядке, за исключением того, что я не могу хранить свой токен в localStorage на стороне клиента, Я получил токен из бэкэнда, но всякий раз, когда я пытался установить его в localStorage, я получал токен как неопределенный это мой бэкэнд службы gRPC: [code]using Grpc.Core; using Microsoft.AspNetCore.Identity;
public class AuthServiceImpl : AuthService.AuthServiceBase { private readonly ITokenService _tokenService; private readonly UserManager _userManager;
public override async Task Login(LoginRequest request, ServerCallContext context) { var user = await _userManager.FindByNameAsync(request.Username);
if (user == null) {
return new AuthResponse { Token = "", Success = false, Message = "Invalid username or password." }; } var passwordHasher = new PasswordHasher(); var result = passwordHasher.VerifyHashedPassword(user, user.PasswordHash, request.Password);
public override async Task SignUp(SignUpRequest request, ServerCallContext context) { Console.WriteLine($"Received sign-up request: Username={request.Username}, Email={request.Email}"); var user = new ApplicationUser { UserName = request.Username, Email = request.Email }; var passwordHasher = new PasswordHasher(); user.PasswordHash = passwordHasher.HashPassword(user, request.Password);
var result = await _userManager.CreateAsync(user);
if (!result.Succeeded) { Console.WriteLine(result.Errors); var errors = string.Join(", ", result.Errors.Select(e => e.Description)); return new AuthResponse { Token = "", Success = false, Message = $"User creation failed: {errors}"
}; }
var token = _tokenService.GenerateToken(request.Username, request.Email); return await Task.FromResult(new AuthResponse {Token = token, Message = "added", Success = true}); } } [/code] это мой генератор токенов: [code]using System.IdentityModel.Tokens.Jwt; using System.Security.Claims; using System.Text; using Microsoft.IdentityModel.Tokens;
public class TokenService : ITokenService { private readonly IConfiguration _configuration;
public TokenService(IConfiguration configuration) { _configuration = configuration; }
public string GenerateToken( string username, string email) { var claims = new[] { new Claim(JwtRegisteredClaimNames.Sub, username), new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()) };
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Key"])); var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var token = new JwtSecurityToken( issuer: _configuration["Jwt:Issuer"], audience: _configuration["Jwt:Audience"], claims: claims, expires: DateTime.Now.AddDays(10), signingCredentials: creds);
return new JwtSecurityTokenHandler().WriteToken(token);
}
} [/code] а это мой компонент входа: [code]import { Component } from '@angular/core'; import { FormBuilder, FormGroup, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms'; import { AuthService } from '../../auth.service'; import { CommonModule } from '@angular/common';
[/code] это моя служба аутентификации в angular: [code]import { Injectable } from '@angular/core'; import { AuthServiceClient } from './proto/auth_pb_service'; import { Observable } from 'rxjs'; import { LoginRequest, SignUpRequest } from './proto/auth_pb'; import { BrowserHeaders } from 'browser-headers';
@Injectable({ providedIn: 'root' })
export class AuthService { private client: AuthServiceClient;
constructor() { this.client = new AuthServiceClient('http://127.0.0.1:5002'); }
[/code] [b]Должен отметить, что вроде бы все в порядке, даже я протестировал свою службу grpc с помощью Bloomrpc, и она генерировала новые токены[/b] при необходимости запросите у меня дополнительный код.
Я успешно применил пользовательскую цветовую палитру с Material 3 и Angular Material Experimental, но продолжаю получать предупреждение в консоли: «Не удалось найти основную тему Angular Material. Большинство компонентов Material могут работать не...
У меня есть веб-приложение PHP Azure для Linux, развернутое с включенной аутентификацией Azure AD. Это работает нормально. В моем приложении есть страница администратора, и я хотел бы запретить доступ пользователям, которые не входят в список...
Извините, если мой вопрос глупый, так как я новичок в платформе aosp.
Я вижу два бэкэнда для разработки службы Binder на стороне платформы aosp на C++. (Пока игнорируйте Java)
Пример:
aidl_interface {
name: example.service ,
vendor_available:...
Извините, если мой вопрос глупый, так как я новичок в платформе aosp.
Я вижу два бэкэнда для разработки службы Binder на стороне платформы aosp на C++. (Пока игнорируйте Java)
Пример:
aidl_interface {
name: example.service ,
vendor_available:...
Я разрабатываю приложение веб-API ASP.NET Core. Я использую Swagger и применил аутентификацию токена носителя JWT, но когда я пытаюсь передать токен носителя из пользовательского интерфейса Swagger, я получаю ошибку 401.
Мой код:...