@@ -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