我尝试使用 sqlsrv 驱动程序通过 Microsoft Entra Auth 从 PHP 连接到 AzureDB,如下所述:
使用的脚本:
<?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# 连接有效,请参见下文:
您知道该脚本是否有效吗?我在这个连接上花了几个小时,没有任何其他想法。 AI 也失败了。
提前感谢您的帮助。
迈克尔
我怀疑您使用的令牌是 Base64 编码的。文档表明假设您的令牌是字节字符串。
首先尝试解码您的令牌字符串:
$byteString = base64_decode($accToken);
$connectionInfo = array("Database"=>$azureAdDatabase,"AccessToken"=>$byteString)
...