У меня есть следующий фрагмент кода, где я получаю параметры JWT, установленные в StartUp.cs
.
Сначала здесь я устанавливаю TokenOptions
в StartUp.cs
в методе ConfigureServices
:
// Get jwt options from app settings
var tokenOptions = _configuration.GetSection("Authentication").Get<JwtTokenOptions>();
services.AddAuthentication(x => {
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options => {
options.TokenValidationParameters = new TokenValidationParameters {
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
RequireExpirationTime = true,
ValidIssuer = tokenOptions.Issuer,
ValidAudience = tokenOptions.Audience,
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(tokenOptions.SigningKey)),
ClockSkew = TimeSpan.Zero
};
});
Это работает, я думаю, и я установил параметры там.
Теперь я хочу использовать эти параметры в классе, используя внедрение зависимостей:
using JobsLedger.AUTHORISATION.Interfaces;
using JobsLedger.CATALOG.ENTITIES;
using JobsLedger.CATALOG.Repositories.Interfaces;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Security.Claims;
using System.Security.Principal;
using System.Threading.Tasks;
using Microsoft.Extensions.Options;
using Microsoft.AspNetCore.Identity;
namespace JobsLedger.AUTHORISATION
{
public class UserAuthorisationServices : IUserAuthorisationServices
{
#region Variables
private readonly IUserCATALOGRepository _userCATALOGRepository;
private readonly IRoleCATALOGRepository _roleCATALOGRepository;
private readonly ICryptoService _cryptoService;
IOptions<TokenOptions> _tokenOptions;
#endregion
public UserAuthorisationServices(IUserCATALOGRepository userCATALOGRepository,
IRoleCATALOGRepository roleCATALOGRepository,
ICryptoService cryptoService,
IOptions<TokenOptions> tokenOptions)
{
_userCATALOGRepository = userCATALOGRepository;
_roleCATALOGRepository = roleCATALOGRepository;
_cryptoService = cryptoService;
_tokenOptions = tokenOptions.Value;
}
Проблема в том, .. Я получаю сообщение об ошибке типа в этой строке:
_tokenOptions = tokenOptions.Value;
и ошибка:
Ошибка CS0266 Не удается неявно преобразовать тип 'Microsoft.AspNetCore.Identity.TokenOptions' в Microsoft.Extensions.Options.IOptions. Существует явное преобразование (вам не хватает приведения?)
Так что это не удается, несмотря на то, что я использую IOptions<TokenOptions>
в обоих случаях.
Что я делаю неправильно и что мне нужно сделать, чтобы это исправить?