簡體   English   中英

圖形用戶標識屬性返回空白字符串

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM