Skip to content

Commit 218d70f

Browse files
committed
Added possibility of setting AuthenticationScheme in SCIMClient
1 parent 89e5905 commit 218d70f

1 file changed

Lines changed: 18 additions & 5 deletions

File tree

src/Scim/SimpleIdServer.Scim.Client/SCIMClient.cs

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ namespace SimpleIdServer.Scim.Client
1616
{
1717
public class SCIMClient : IDisposable
1818
{
19+
private const string DefaultAuthenticationScheme = "Bearer";
20+
1921
private readonly HttpClientHandler _handler = null;
2022
private readonly string _baseUrl;
2123
private HttpClient _httpClient;
2224
private SearchResult<ResourceTypeResult> _resourceTypes;
2325

26+
public string AuthenticationScheme { get; set; } = DefaultAuthenticationScheme;
27+
2428
public SCIMClient(string baseUrl)
2529
{
2630
_baseUrl = baseUrl;
@@ -76,7 +80,7 @@ public async Task<SearchResult<ResourceTypeResult>> GetResourceTypes(Cancellatio
7680
Method = HttpMethod.Get,
7781
RequestUri = new Uri($"{GetPath(userEdp)}?{queryString}")
7882
};
79-
if (!string.IsNullOrWhiteSpace(accessToken)) request.Headers.Add("Authorization", accessToken);
83+
if (!string.IsNullOrWhiteSpace(accessToken)) AddAccessTokenToAuthorizationHeader(request, accessToken);
8084
var httpClient = GetHttpClient();
8185
var httpResult = await httpClient.SendAsync(request, cancellationToken);
8286
httpResult.EnsureSuccessStatusCode();
@@ -95,7 +99,7 @@ public async Task<SearchResult<ResourceTypeResult>> GetResourceTypes(Cancellatio
9599
Method = HttpMethod.Get,
96100
RequestUri = new Uri($"{GetPath(groupEdp)}?{queryString}")
97101
};
98-
if (!string.IsNullOrWhiteSpace(accessToken)) request.Headers.Add("Authorization", accessToken);
102+
if (!string.IsNullOrWhiteSpace(accessToken)) AddAccessTokenToAuthorizationHeader(request, accessToken);
99103
var httpClient = GetHttpClient();
100104
var httpResult = await httpClient.SendAsync(request, cancellationToken);
101105
httpResult.EnsureSuccessStatusCode();
@@ -113,7 +117,7 @@ public async Task<RepresentationResult> GetGroup(string id, string accessToken,
113117
Method = HttpMethod.Get,
114118
RequestUri = new Uri($"{GetPath(groupEdp)}/{id}")
115119
};
116-
if (!string.IsNullOrWhiteSpace(accessToken)) request.Headers.Add("Authorization", accessToken);
120+
if (!string.IsNullOrWhiteSpace(accessToken)) AddAccessTokenToAuthorizationHeader(request, accessToken);
117121
var httpClient = GetHttpClient();
118122
var httpResult = await httpClient.SendAsync(request, cancellationToken);
119123
httpResult.EnsureSuccessStatusCode();
@@ -131,7 +135,7 @@ public async Task<JsonObject> GetUser(string id, string accessToken, Cancellatio
131135
Method = HttpMethod.Get,
132136
RequestUri = new Uri($"{GetPath(groupEdp)}/{id}")
133137
};
134-
if (!string.IsNullOrWhiteSpace(accessToken)) request.Headers.Add("Authorization", $"Bearer {accessToken}");
138+
if (!string.IsNullOrWhiteSpace(accessToken)) AddAccessTokenToAuthorizationHeader(request, accessToken);
135139
var httpClient = GetHttpClient();
136140
var httpResult = await httpClient.SendAsync(request, cancellationToken);
137141
httpResult.EnsureSuccessStatusCode();
@@ -150,14 +154,23 @@ public async Task<SCIMErrorRepresentation> AddUser(JsonObject jsonObject, string
150154
RequestUri = new Uri(GetPath(userEdp)),
151155
Content = new StringContent(jsonObject.ToJsonString(), Encoding.UTF8, "application/json")
152156
};
153-
if (!string.IsNullOrWhiteSpace(accessToken)) request.Headers.Add("Authorization", $"Bearer {accessToken}");
157+
if (!string.IsNullOrWhiteSpace(accessToken)) AddAccessTokenToAuthorizationHeader(request, accessToken);
154158
var httpClient = GetHttpClient();
155159
var httpResult = await httpClient.SendAsync(request, cancellationToken);
156160
if (httpResult.IsSuccessStatusCode) return null;
157161
var content = await httpResult.Content.ReadAsStringAsync();
158162
return JsonSerializer.Deserialize<SCIMErrorRepresentation>(content);
159163
}
160164

165+
private void AddAccessTokenToAuthorizationHeader(HttpRequestMessage request, string accessToken)
166+
{
167+
var headerValue = string.IsNullOrEmpty(AuthenticationScheme)
168+
? accessToken
169+
: string.Join(" ", AuthenticationScheme, accessToken);
170+
171+
request.Headers.Add("Authorization", headerValue);
172+
}
173+
161174
private HttpClient GetHttpClient()
162175
{
163176
if (_httpClient != null) return _httpClient;

0 commit comments

Comments
 (0)