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))); }