示例#1
0
        public async Task <IActionResult> ObapiViaHybridConnection(string scheme = "https")
        {
            var           obapiDomain  = "devtest-obapi.vfltest.dk";
            var           adfsDomain   = "devtest-idp.vfltest.dk";
            WsTrustClient c            = new WsTrustClient(adfsDomain);
            var           tokenRequest = new SamlTokenRequest
            {
                Audience = $"https://{obapiDomain}/",
                Username = _configuration["serviceusername"],
                Password = _configuration["servicepassword"],
            };
            var tokenResponse = await c.RequestTokenAsync(tokenRequest);

            var encodedToken = new DeflatedSamlEncoder().Encode(tokenResponse.TokenXml);

            using var client = _httpClientFactory.CreateClient();
            var request = new HttpRequestMessage(HttpMethod.Get, $"{scheme}://{obapiDomain}/v2/Users/");

            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", encodedToken);
            var response = await client.SendAsync(request);

            var responseContent = await response.Content.ReadAsStringAsync();

            var output =
                $"User: {tokenRequest.Username}{Environment.NewLine}Request url: {request.RequestUri}{Environment.NewLine}StatusCode: {response.StatusCode}{Environment.NewLine}Content:{Environment.NewLine}{responseContent}";

            return(this.Content(output));
        }
        protected override async Task <AuthenticateResult> HandleAuthenticateAsync()
        {
            const string Authorization = "Authorization";

            StringValues headerValue;

            if (!Context.Request.Headers.TryGetValue(Authorization, out headerValue))
            {
                return(AuthenticateResult.NoResult());
            }
            if (headerValue.Count > 1)
            {
                return(AuthenticateResult.Fail("Multiple Authorization headers"));
            }

            var authzHeaderValue = headerValue.Single();

            if (!authzHeaderValue.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase))
            {
                return(AuthenticateResult.Fail("Authorization header not prefixed with 'Bearer '"));
            }
            // TODO: Additional validation to avoid blowing up on other token types
            var encodedToken = authzHeaderValue.Split(' ', 2).Last();
            var token        = new DeflatedSamlEncoder().Decode(encodedToken);
            var principal    = await this.Validate(token);

            return
                (AuthenticateResult.Success(
                     new AuthenticationTicket(
                         principal,
                         new AuthenticationProperties(),
                         this.Scheme.Name)));
        }