Я переношу свое старое приложение, написанное в (VS2013) MVC5 с угловым 1 в (VS2015) MVC 6 с угловым 2. В моем приложении MVC 5 я использовал Получать токен от клиента в способе после действия на стороне Web UI, который я использовал, чтобы затем хранить в сессии, используя следующие строки кода:Использование JWT, отправленного Angular на веб-сайт Aspnet core 1.0
//Store token details
[HttpPost]
public void EvaluateToken(string token)
{
JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler();
SecurityToken st = tokenHandler.ReadToken(token);
var tokenData = ((JwtSecurityToken)st);
var claims = tokenData.Claims.Where(t => t.Type.Equals(" ")).ToList();
ClaimsIdentity cIdentity = new ClaimsIdentity(DefaultAuthenticationTypes.ExternalBearer);
ci.AddClaims(claims);
AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, cIdentity);
string user = "//get username from token";
ClaimsPrincipal cPrincipal = new ClaimsPrincipal (cIdentity);
//write to cookie
SessionSecurityToken sst = new SessionSecurityToken(cPrincipal , TimeSpan.FromMinutes(20));
sst.IsReferenceMode = true;
SessionAuthenticationModule ssm = FederatedAuthentication.SessionAuthenticationModule;
ssm.WriteSessionTokenToCookie(sst);
}
код выше работает хорошо, не aspnetcore проектов и I я могу получить претензии из Контекста авторизации, используя следующие строки кода, где action
содержит требование, установленное для атрибута, над вызываемым соответствующим способом действия, и val
содержит bool true или false указанного требования или нет i n context.Principal
.
public class CustomClaimsAuthorizationManager: ClaimsAuthorizationManager
{
public override bool CheckAccess(AuthorizationContext context)
{
var action = context.Action.First().Value;
bool val= context.Principal.HasClaim(" ", action);
return val;
}
}
Однако при переходе на основной проект, я получаю эту ошибку:
ID1061: HttpContext.Current is null. This code path is only valid when in the execution context of ASP.NET.
на этой строке коды в моем методе EvaluateToken:
SessionAuthenticationModule ssm = FederatedAuthentication.SessionAuthenticationModule;
Мне нужна эта строка работайте так, чтобы при попытке получить доступ к методу действий, который имеет свой пользовательский атрибут претензии, я должен иметь возможность оценить, существует ли требование в токене или нет. Если нет способа переместить это as-is в ядро aspnet, я хочу знать, как ядро aspnet могу использовать токен, чтобы разрешить доступ к определенному виду, имеющему только переданный токен, а также аудиторию, эмитент и секретный ключ используется для генерации токена. В документации указано добавление пользовательских политик и, похоже, происходит другой путь. Я не уверен, как использовать такую логику для хранения претензий в основном объекте на стороне интерфейса, чтобы он мог использоваться при перемещении между представлениями на стороне пользовательского интерфейса.
Это то, что я имею в моих startup.cs файл на веб-проекте ядра САШ в методе Configure:
var issuer = "localhost";
var aud = "localhost";
var secret = "SecretValueHere";
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(secret));
var jwtBearerOptions = new JwtBearerOptions
{
AutomaticAuthenticate = true,
AutomaticChallenge = true,
Audience = aud ,
ClaimsIssuer = issuer,
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
IssuerSigningKey = signingKey,
ValidateIssuer = true,
ValidIssuer = issuer,
ValidateAudience = true,
ValidAudience = aud ,
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero,
RequireExpirationTime = true
}
};
app.UseJwtBearerAuthentication(jwtBearerOptions);
Я использую атрибут 'ClaimsPrinciplePermission', а не атрибут' Authorize'. Есть ли способ сделать это с помощью 'ClaimsPrinciplePermission' в ядре aspnet? или мне нужно переместить все это для авторизации? – user20358
Есть ли специальная причина использовать ClaimsPrinciplePermission для вашего дела? Если бы я не использовал атрибут authorize. –
Я переношу устаревший код в ядро aspnet. Для этого было бы много доработок. В соответствующей заметке я попробовал то, что вы упомянули, используя этот пример здесь, чтобы сделать логин (http://andrewlock.net/introduction-to-authentication-with-asp-net-core/) и этот пример (https: //docs.asp.net/en/latest/security/authorization/policies.html) для оценки входящих требований. Однако список претензий в свойстве 'AuthorizationHandlerContext context' не дает результата. Почему это? – user20358