无法使用 PHP 中的 Azure AD 访问令牌连接到 AzureDB

问题描述 投票:0回答:1

我尝试使用 sqlsrv 驱动程序通过 Microsoft Entra Auth 从 PHP 连接到 AzureDB,如下所述:

https://learn.microsoft.com/en-us/sql/connect/php/azure-active-directory?view=sql-server-ver15#example---connect-using-azure-ad-access-代币

使用的脚本:

<?php
$azureAdServer = 'xxx.crm4.dynamics.com,5558';
$accToken = 'xxx>';
$azureAdDatabase = 'xxx';

// Using an access token to connect: do not use UID or PWD connection options
// Assume $accToken is the valid byte string extracted from an OAuth JSON response
$connectionInfo = array("Database"=>$azureAdDatabase,"AccessToken"=>$accToken);
$conn = sqlsrv_connect($azureAdServer, $connectionInfo);
if ($conn === false) {
    echo "Could not connect with Azure AD Access Token.\n";
   die( print_r( sqlsrv_errors(), true));
} else {
    echo "Connected successfully with Azure AD Access Token.\n";
    sqlsrv_close($conn);
}
?>

总是得到:

无法与 Azure AD 访问令牌连接

我可以确认凭据正确,通过 C# 连接有效,请参见下文:

有效的 C# 代码图像

您知道该脚本是否有效吗?我在这个连接上花了几个小时,没有任何其他想法。 AI 也失败了。

提前感谢您的帮助。

迈克尔

php database azure sqlsrv
1个回答
0
投票

我怀疑您使用的令牌是 Base64 编码的。文档表明假设您的令牌是字节字符串。

首先尝试解码您的令牌字符串:

$byteString = base64_decode($accToken);

$connectionInfo = array("Database"=>$azureAdDatabase,"AccessToken"=>$byteString)
...
© www.soinside.com 2019 - 2024. All rights reserved.