ASP.Net core 2.2 web api - Как установить аудиторию JwtSecurityToken в качестве URL / хоста текущего запросчика для вызовов ajax - PullRequest
0 голосов
/ 27 февраля 2019

Я работаю над добавлением аутентификации на основе JWT для веб-API asp.net Core 2.2.В соответствии с моими потребностями нам необходимо поддерживать несколько аудиторий и доменов.

В рамках этого я могу настроить параметры TokenValidationParameters для регистрации действительного списка аудиторий в формате ниже:

        services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
    options.RequireHttpsMetadata = false;

    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = APIConstants.TokenIssuer,
        ValidAudiences = APIConstants.TokenAudience.Replace(" ", string.Empty).Split(',').ToList(),
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(APIConstants.TokenSecret))
    };
});

        // enabled CORS in api by this policy
        services.AddCors(o => o.AddPolicy("GlablEnableCorsPolicy", builder =>
        {
            builder.WithOrigins(APIConstants.CorsAllowedForOrigins.Replace(" ", string.Empty).Split(','))
                   .WithMethods(APIConstants.CorsAllowedForMethods.Replace(" ", string.Empty).Split(','))
                   .AllowAnyHeader();
        }));

, нопри генерации токена JWT, как показано ниже, я не могу получить URL-адрес (хост) текущего клиентского приложения для свойства аудитории объекта JwtSecurityToken.

    var token = new JwtSecurityToken(
        issuer: APIConstants.TokenIssuer,
        // *audience: string.Concat(this.Request.Scheme, "://", this.Request.Host),//Tried this way, this too has same issue

        audience: "http://xxx-test",
        expires: DateTime.Now.AddDays(APIConstants.TokenExpireAfter),
        signingCredentials: creds);

Клиентское приложение, запрашивающее API для токена, создаетпростой jquery ajax вызов конечной точки, которая генерирует JwtSecurityToken и возвращает обратно.

Здесь я не знаю, по какой причине, но "Request.Host" или "Request.Host.Host" оба для данного APIконечная точка не дает мне хост / домен клиентского приложения, которое совершило ajax-вызов api.

Мне не хватает какой-то концепции здесь?Я ожидал, что один из них даст мне домен / хост клиентского приложения, который я затем смогу использовать для определения аудитории при создании токена. Может ли моя конечная точка API узнать, какой хост вызвал этот вызов ajax?

Пожалуйста, дайте мне знать, если мне нужно внести ясность в мой вопрос.

Спасибо ...

...