az帐户不提示登录,但仍授予访问权限



我正在构建一个与SQL MI交互的powershell脚本

有许多方法可以做到这一点。出于各种原因,我选择了这里描述的。net框架:

https://www.sqlshack.com/connecting-powershell-to-sql-server/

为了进行身份验证,我使用az account get-access-token

获得令牌这个可以工作,但是让我担心的是它没有提示任何东西,包括MFA。

这是如何授予我访问数据库而不经过MFA?

复制以下代码:

$SqlConn = New-Object System.Data.SqlClient.SqlConnection
$SqlConn.ConnectionString="Server=$DBServer;Encrypt=True;TrustServerCertificate=True;Connection Timeout=10;ApplicationIntent=ReadOnly;"
# note this finishes executing without prompting for anything and returns a valid token
SqlConn.AccessToken=$(az account get-access-token --tenant $tenant --resource https://database.windows.net --query accessToken -o tsv)
SqlConn.Open()

然后我有一些代码在数据库中运行各种选择,包括suser_sname(),这显示了我的AAD登录

但是我从来没有被提示输入密码或通过MFA

我如何获得访问SQL MI数据不通过MFA?

为了排除某种登录缓存,我是;

  • 完全退出并处于RDP会话
  • 运行https://login.microsoftonline.com/common/oauth2/v2.0/logout完全注销
  • az login --tenant $tenant提示登录+MFA
  • (Get-AzContext).TokenCache.ReadItems()给出你不能在一个空值表达式上调用方法
  • 通过此方法登录后,登录SSMS,提示login+MFA

所以我不认为这是在使用现有的缓存登录

这似乎是一个SSO情况或与资源有关的事情,但为什么限制到Azure SQL资源不需要MFA或pwd?

使用缓存的刷新令牌来获取令牌。只要刷新令牌有效,就不需要MFA或密码。

这个答案提到了缓存存储的位置:https://stackoverflow.com/a/69011720/1658906.

此缓存与SSMS或浏览器使用的缓存是分开的,因此注销/登录时会有不同的状态。

Get-AzContext不会返回这个,因为据我所知,它也使用了不同的缓存。

在这里发布更详细的代码答案

下面是一些Powershell代码

  • 如果存在,使用缓存的Azure cli令牌登录到Azure SQL数据库
  • 如果没有缓存令牌,提示登录
  • 你可以使用。net对象做你所有好的SQL的东西
$SqlConn = New-Object System.Data.SqlClient.SqlConnection
$SqlConn.ConnectionString="Server=$DBServer;Encrypt=True;TrustServerCertificate=True;Connection Timeout=10;ApplicationIntent=ReadOnly;"
$jwt=$(az account get-access-token --tenant $tenant --resource https://database.windows.net --query accessToken -o tsv)
if ([string]::IsNullOrWhiteSpace($jwt)) {
az login --tenant $tenant
$jwt=$(az account get-access-token --tenant $tenant --resource https://database.windows.net --query accessToken -o tsv)  
}
SqlConn.AccessToken=$jwt
SqlConn.Open()

整个过程非常不一致。

  • az cli可以使用缓存令牌90天,不需要登录
  • SSMS和Azure Portal总是要求在新的windows会话中登录,也有各种登录超时强加
  • 我甚至不能让Azure Data Studio登录,因为它使用了另一组登录过程,这些过程似乎是基于VSCode的,并返回到运行在本地主机上的docker映像。我当前的客户端被锁定了,我们不可能让这个工作

相关内容

  • 没有找到相关文章

最新更新