2016-10-26 3 views
0

Я переношу свое старое приложение, написанное в (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); 

ответ

0

ID1061: HttpContext.Current is null. This code path is only valid when in the execution context of ASP.NET.

HttpContext.Current не доступен ПАШ Core. См. Access HttpContext.Current.

I need this line to work so that when I try to access an action method that has my custom claim attribute, I should be able to evaluate if the claim in the token exists or not

Вам просто нужно (я предполагаю, что претензии хранятся в знак):

  1. JWT аутентификации промежуточного слоя (вы уже пробовали)
  2. Claims Based Authorization.

Если вам нужны дополнительные претензии не хранится в лексема, то вы можете использовать Claims Transformation или OnTokenValidated события промежуточной аутентификации JWT.

+0

Я использую атрибут 'ClaimsPrinciplePermission', а не атрибут' Authorize'. Есть ли способ сделать это с помощью 'ClaimsPrinciplePermission' в ядре aspnet? или мне нужно переместить все это для авторизации? – user20358

+0

Есть ли специальная причина использовать ClaimsPrinciplePermission для вашего дела? Если бы я не использовал атрибут authorize. –

+0

Я переношу устаревший код в ядро ​​aspnet. Для этого было бы много доработок. В соответствующей заметке я попробовал то, что вы упомянули, используя этот пример здесь, чтобы сделать логин (http://andrewlock.net/introduction-to-authentication-with-asp-net-core/) и этот пример (https: //docs.asp.net/en/latest/security/authorization/policies.html) для оценки входящих требований. Однако список претензий в свойстве 'AuthorizationHandlerContext context' не дает результата. Почему это? – user20358

Смежные вопросы