-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBaseBearerTokenAuthenticationProvider.php
85 lines (75 loc) · 2.79 KB
/
BaseBearerTokenAuthenticationProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
<?php
namespace Microsoft\Kiota\Abstractions\Authentication;
use Microsoft\Kiota\Abstraction\Promise\FulfilledPromise;
use Microsoft\Kiota\Abstraction\Promise\Promise;
use Microsoft\Kiota\Abstractions\RequestInformation;
/**
* Class BaseBearerTokenAuthenticationProvider
*
* Provides a base class for implementing {@link AuthenticationProvider} for Bearer authentication scheme
*
* @package Microsoft\Kiota\Abstractions\Authentication
* @copyright 2022 Microsoft Corporation
* @license https://opensource.org/licenses/MIT MIT License
* @link https://developer.microsoft.com/graph
*/
class BaseBearerTokenAuthenticationProvider implements AuthenticationProvider {
/**
* @var string $authorizationHeaderKey The Authorization header key
*/
private static string $authorizationHeaderKey = "Authorization";
/**
* Claims key to search for in $additionalAuthenticationContext
*
* @var string
*/
private static string $claimsKey = "claims";
/**
* @var AccessTokenProvider {@link AccessTokenProvider}
*/
private AccessTokenProvider $accessTokenProvider;
/**
* Creates a new instance
* @param AccessTokenProvider $accessTokenProvider to use for getting the access token
*/
public function __construct(AccessTokenProvider $accessTokenProvider)
{
$this->accessTokenProvider = $accessTokenProvider;
}
/**
* Gets the {@link AccessTokenProvider} used for getting the access token
*
* @return AccessTokenProvider
*/
public function getAccessTokenProvider(): AccessTokenProvider
{
return $this->accessTokenProvider;
}
/**
* @param RequestInformation $request
* @param array<string, mixed> $additionalAuthenticationContext
* @return Promise<RequestInformation>
*/
public function authenticateRequest(
RequestInformation $request,
array $additionalAuthenticationContext = []
): Promise
{
if (array_key_exists(self::$claimsKey, $additionalAuthenticationContext)
&& $request->getHeaders()->contains(self::$authorizationHeaderKey)
) {
$request->getHeaders()->remove(self::$authorizationHeaderKey);
}
if (!$request->getHeaders()->contains(self::$authorizationHeaderKey)) {
return $this->getAccessTokenProvider()
->getAuthorizationTokenAsync($request->getUri(), $additionalAuthenticationContext)
->then(function ($token) use ($request) {
if ($token) {
$request->addHeader(self::$authorizationHeaderKey, "Bearer {$token}");
}
return $request;
});
}
return new FulfilledPromise($request);
}
}