Пример #1
0
        protected override Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            StringValues authHeaderString;
            var          existAuthorizationHeader =
                Context.Request.Headers.TryGetValue(Constants.AuthenticationHeaderName, out authHeaderString);

            if (existAuthorizationHeader == false)
            {
                return(Task.FromResult(AuthenticateResult.Fail("No Authorization header present")));
            }

            AuthenticationHeaderValue authHeader;
            var canParse = AuthenticationHeaderValue.TryParse(authHeaderString[0], out authHeader);

            if (canParse == false || authHeader.Scheme != TestServerAuthenticationDefaults.AuthenticationScheme)
            {
                return(Task.FromResult(AuthenticateResult.Fail("Authorization header not valid")));
            }

            var headerClaims = DefautClaimsEncoder.Decode(authHeader.Parameter);
            var identity     = new ClaimsIdentity(
                claims: Options.CommonClaims.Union(headerClaims),
                authenticationType: Options.AuthenticationScheme,
                nameType: Options.NameClaimType,
                roleType: Options.RoleClaimType);

            var ticket = new AuthenticationTicket(
                new ClaimsPrincipal(identity),
                new AuthenticationProperties(),
                Options.AuthenticationScheme);

            return(Task.FromResult(AuthenticateResult.Success(ticket)));
        }
        public static RequestBuilder WithIdentity(this RequestBuilder requestBuilder, IEnumerable <Claim> claims)
        {
            requestBuilder.AddHeader(
                Constants.AuthenticationHeaderName,
                $"{TestServerAuthenticationDefaults.AuthenticationScheme} {DefautClaimsEncoder.Encode(claims)}");

            return(requestBuilder);
        }
        public static HttpClient WithDefaultIdentity(this HttpClient httpClient, IEnumerable <Claim> claims)
        {
            httpClient.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue(
                    TestServerAuthenticationDefaults.AuthenticationScheme,
                    DefautClaimsEncoder.Encode(claims));

            return(httpClient);
        }