[英]Graph User id property returning blank string
我已經為我的身份驗證提供程序之一使用microsoft / microsoft-graph SDK的php web應用程序(托管在Azure上)。
我能夠獲得令牌並提取一些用戶屬性,但是'id'值似乎返回了一個空白字符串:
$me = $provider->get("me", $token);
printf('<br>Hello %s!', $me['displayName']);
printf('<br>First Name: %s', $me['givenName']);
printf('<br>Last Name: %s', $me['surname']);
printf('<br>ID: %s', $me['id']); // returns nothing
printf('<br>Email: %s', $me['userPrincipalName']);
printf('<br>Country: %s', $me['country']);
printf('<br>Postal Code: %s', $me['postalCode']);
根據用戶參考 ,我應該能夠以字符串形式獲取用戶ID值。
我還在項目中使用了thenetworg/oauth2-azure
,以下內容確實返回了GUID。 我要尋找的ID是否相同? 圖的唯一用戶ID? 還是其他ID?
printf('<br>ID: %s', $resourceOwner->getId());
理想情況下,我想像其他所有屬性一樣直接從Graph獲取ID值。 我是否需要對ID屬性做一些特別的准備? (好吧,顯然...)是Graph,PHP庫還是其他問題?
謝謝你的協助。
[更新]
好,現在備份一步:我有兩頁:
第1頁包含許多身份驗證選項的鏈接。 頁面2是這些選項之一的重定向-Microsoft Work和School選項。
現在,第1頁使用以下內容創建鏈接:
$mscallbackUrl = $urlcore . '/ms-callback.php';
$provider = new TheNetworg\OAuth2\Client\Provider\Azure([
'clientId' => $msAppId,
'clentSecret' => $msAppSecret,
'redirectUri' => $mscallbackUrl
]);
$provider->urlAPI = "https://graph.microsoft.com/v1.0/";
$provider->resource = "https://graph.microsoft.com/";
$authUrl = $provider->getAuthorizationUrl();
第2頁使用與上面完全相同的代碼來設置$ provider,然后使用以下代碼連接到Graph:
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code']
]);
try {
$graph = new \Microsoft\Graph\Graph();
$graph->setAccessToken($token->getToken());
$me = $graph->createRequest("GET", "/me")
->setReturnType(Model\User::class)
->execute();
printf('<br>Hello %s!', $me->getDisplayName());
printf('<br>ID: %s', $me->id);
這段代碼在$me = $graph->createRequest
上失敗。我發現一個引用說它可能由於令牌問題而失敗。
我認為可能會導致混亂。 默認情況下, oauth2-azure
庫對AAD Graph資源( https://graph.windows.net )而非Microsoft Graph資源( https://graph.microsoft.com )進行身份驗證,因此您將需要驗證您請求訪問令牌以獲取正確的資源。
其次,AAD Graph不返回id
字段,因此它將返回null。 我相信與MS Graph相關的等效字段是oid
。
第三,您正在使用oauth2-azure
庫而不是Microsoft Graph的microsoft-graph
庫訪問AAD Graph。 獲得訪問令牌后,可以將其傳遞給新的Graph實例,如下所示:
$graph = new \Microsoft\Graph\Graph();
$graph->setAccessToken($token->getToken());
$me = $graph->createRequest("GET", "/me")
->setReturnType(Model\User::class)
->execute();
echo $me->id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.