ahmed_sa Ответов: 1

Как добавить userid в полезную нагрузку при создании маркера доступа с помощью JWT ASP.NET ядро 2.2 ?


проблема

Как добавить UserId в полезную нагрузку при создании маркера доступа с помощью JWT asp.net ядро 2.2 ?

я делаю функцию generate access token, но мне нужно изменить ее, чтобы иметь или загрузить userid на полезную нагрузку и получить результат в виде json ?

как это сделать, если это возможно ?
Мне нужно если строка идентификатор пользователя параметры имеют значения добавить его грузоподъемность получения доступа в tokeen


Что я уже пробовал:

public string GenerateTokens(string userId)
        {

            var Claims = new Claim[]
                     {
            new Claim(JwtRegisteredClaimNames.Sub,userId)
                     };
            var signingkey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is secret phrase"));
            var SigningCredntials = new SigningCredentials();
            var Jwt = new JwtSecurityToken();
            
            return new JwtSecurityTokenHandler().WriteToken(Jwt);
        }
configure service on startup
public void ConfigureServices(IServiceCollection services)
        {
            
            //=================This Setting Related To generate Access Token Data===============
            var signingkey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("this is secret phrase"));
           
            services.AddAuthentication(options => {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

            }).AddJwtBearer(cfg =>
            {
                cfg.RequireHttpsMetadata = false;
                cfg.SaveToken = false;
                cfg.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
                {
                    IssuerSigningKey = signingkey,
                    ValidateAudience = false,
                    ValidateIssuer = false,
                    ValidateLifetime = false,
                    ValidateIssuerSigningKey = true
                };
            });
         
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
           
        }

1 Ответов

Рейтинг:
1

zamanipour

Если я понял вашу точку зрения, то помимо добавления предопределенных стандартных утверждений вы можете легко добавить пользовательское имя/значение к вашим утверждениям и вернуть их обратно в свой пользовательский интерфейс:

var Claims = new Claim[]
{
   new Claim("userId",userId)
};


ahmed_sa

спасибо за ответ на jwt есть имя вещи полезная нагрузка
знак.полезная нагрузка
но я не знаю, как им пользоваться
или как его реализовать

zamanipour

я только что изменил строку в вашем собственном коде: 'new Claim(JwtRegisteredClaimNames.Суб,идентификатор пользователя) и заменил ее новой пользовательской пары имя/значение. вы можете добавить столько утверждений, сколько захотите. для использования проверки подлинности, это зависит от вашего фронт-енд технологий. после реализации необходимой логики для расшифровки Вашего сообщения во внешнем интерфейсе (поиск его на основе вашей технологии) вы можете иметь свою полезную нагрузку в виде объекта json и использовать объект claims для изменения страницы.

ahmed_sa

спасибо за ответ можете ли вы ответить подробно если это возможно это на самом деле то что
мне нужно завершить то, что вы пишете, сделав пример в качестве ответа
можете ли вы очистить это ( вы можете иметь свою полезную нагрузку в виде объекта json и использовать объект claims для изменения страницы.)

zamanipour

выезд https://www.codeproject.com/Articles/5160941/ASP-NET-CORE-Token-Authentication-and-Authorizatio

ahmed_sa

Этот код добавить ID пользователя полезная нагрузка до
см. раздел измененный код
public string GenerateTokens(string userId)
{

претензии ВАР = новый иск[]
{
новая претензия(JwtRegisteredClaimNames.Суб,идентификатор пользователя)
};
var signingkey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("это секретная фраза"));
ВАР SigningCredntials = новая учетных данных подписывания signingcredentials(signingkey, SecurityAlgorithms.Тип hmacsha256);
var Jwt = новый JwtSecurityToken();
ВАР jsonu = новый { идентификатор = идентификатор пользователя };
Jwt.полезная нагрузка["пользователь"] = jsonu;
верните новый JwtSecurityTokenHandler().WriteToken(Jwt);
}

zamanipour

на самом деле этот код добавляет претензию в ваш список претензий, вы можете изменить его с моим, если хотите:
претензии ВАР = новый иск[]
{
новая претензия(JwtRegisteredClaimNames.Суб,идентификатор пользователя)
};
для получения дополнительной информации вы можете прочитать документ, который я упомянул выше. внедрение jwt-это пошаговый процесс, и для этого вы должны использовать исчерпывающее руководство.