Nadeesha Gayan Premadasa Ответов: 0

Не удалось получить данные httpactioncontext.


У меня есть служба веб-api, написанная на .net framework 4.6.2, и только мобильный доступ к этой веб-службе. Однако только для входа в мобильный доступ другой веб-сервис написан .net standard 2. я могу получить токен с сервера, но когда я пытаюсь расшифровать токен на стороне .net framework, аутентификация завершается неудачей.

Ниже приведен код на стороне .net framework.

public class CustomAuthorize : System.Web.Http.AuthorizeAttribute
    {
        public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            var ss = actionContext.Request.Headers;

            if (!actionContext.RequestContext.Principal.Identity.IsAuthenticated)
                throw new UnauthorizedAccessException();

            base.OnAuthorization(actionContext);
            var principal = actionContext.RequestContext.Principal.Identity as System.Security.Claims.ClaimsIdentity;
            CustomPrincipal user = new CustomPrincipal(principal.Claims);

            // TODO: Check Role Feature

            System.Threading.Thread.CurrentPrincipal = user;
        }
    }


Ниже приводится start.cs в приложении веб-службы .net framework, где установлен токен

var securityKey = ConfigurationManager.AppSettings.Get("SecurityKey");
                var key = System.Text.Encoding.UTF8.GetBytes(securityKey);
                var signingKey = new SymmetricSecurityKey(key);
                
                var audience = ConfigurationManager.AppSettings.Get("Audience");
                var issuer = ConfigurationManager.AppSettings.Get("Issuer");

                var val = new Microsoft.Owin.Security.Jwt.SymmetricKeyIssuerSecurityTokenProvider(issuer, key);
                var tokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters()
                {
                    ValidIssuer = val.Issuer,
                    ValidAudience = audience,
                    ValidAudiences = new string[] { audience },
                    ValidIssuers = new string[] { issuer },
                    ValidateIssuerSigningKey = true,
                    ValidateIssuer = true,
                    ValidateAudience = true,
                    IssuerSigningTokens = val.SecurityTokens,
                    ClockSkew = TimeSpan.Zero
                };

                app.UseJwtBearerAuthentication(new Microsoft.Owin.Security.Jwt.JwtBearerAuthenticationOptions
                {
                    TokenValidationParameters = tokenValidationParameters
                });


Следующее находится на стороне .net standard startup.cs, где настраиваются параметры

private void AddCustomJwtBearer(IServiceCollection services, TokenSetting tokenSetting) {

            
            var securityKey = tokenSetting.SecretKey;
            var key = Encoding.UTF8.GetBytes(securityKey);

            var signingKey = new SymmetricSecurityKey(key);
            var tokenValidationParameters = new TokenValidationParameters()
            {
                ValidAudiences = new string[]
                {
                    tokenSetting.Audience
                },
                ValidIssuers = new string[]
                {
                    tokenSetting.Issuer
                },
                ValidateIssuerSigningKey = true,
                IssuerSigningKey = signingKey,
                ClockSkew= TimeSpan.Zero
            };

            services.AddAuthentication(options =>
            {
                options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
            })

            .AddJwtBearer(options =>
            {
                options.Events = new JwtBearerEvents
                {
                    OnAuthenticationFailed = context =>
                    {
                        context.Response.Headers.Add("x-tokenstatus-header", "fail");
                        return Task.CompletedTask;
                    }
                };
                options.Audience = tokenSetting.Audience;
                options.RequireHttpsMetadata = tokenSetting.RequireHttpsMetadata;
                options.TokenValidationParameters = tokenValidationParameters;
            });

        }


Кто-нибудь может мне помочь? Пожалуйста, я застрял здесь на некоторое время. Если вы сделаете еще какие-нибудь коды, пожалуйста, дайте мне знать.

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

Я старался сделать все похожим.

//var tokenValidationParameters2 = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
                //{
                //    ValidAudiences = new string[] { audience },
                //    ValidIssuers = new string[] { issuer },
                //    ValidateIssuerSigningKey = true,
                //    IssuerSigningKey = signingKey,
                //    ClockSkew = TimeSpan.Zero
                //};


Вышеприведенный код также не был согласован.

0 Ответов