gpt4 book ai didi

java - 本地计算机连接到 Azure Active Directory,以便我们可以访问 ActiveDirectoryMSI 身份验证以及 I​​MDS SERVER

转载 作者:行者123 更新时间:2023-12-02 07:57:57 30 4
gpt4 key购买 nike

我们希望将 AzureSqlServer 与 ActiveDirectoryMSI 身份验证以及基于 token 的身份验证结合使用我们能够从在 Azure 网络中创建并添加为 Azure AD 组成员的 VM 成功执行。为此,我们通过链接创建了包含用户

https://learn.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/tutorial-windows-vm-access-sql

并将虚拟机添加为 AzureActiveDirectory 的一部分通过点击此链接

com.microsoft.sqlserver.jdbc.SQLServerException: MSI Token failure: Failed to acquire token from MSI Endpoint

我们能够使用 IMDS 服务器访问 SQL 数据,而无需提供用户名和密码,并且能够使用以下命令检索 token http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F

ActiveDirectorMSIURIString jdbc:sqlserver://azuresqlserverNAME:1433;databaseName=DatabaseNAME;Authentication=ActiveDirectoryMsi;.

但是当从本地 Windows/Linux/Mac 计算机进行访问时,我们无法访问 Azure SQL 服务器

有人可以向我建议在本地需要做什么,以便我们可以使用 ActiveDirectoryMSI 身份验证以及基于 token 的身份验证访问 AzureSqlServer 吗?

最佳答案

根据我的测试,如果您想连接Azure SQL本地机器,请引用以下步骤

  1. 创建服务主体
az ad sp create-for-rbac -n 'name' --skip-assignment
  • Add the service principal as Azure SQL database contained user .

  • 设置环境变量。请将以下变量设置为环境变量

  • AZURE_TENANT_ID: ID of the service principal's tenant. Also called its 'directory' ID.

    AZURE_CLIENT_ID: the service principal's client ID

    AZURE_CLIENT_SECRET: one of the service principal's client secrets
  • SDK

  • <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.0.7</version>
    </dependency>
    <dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>8.2.2.jre8</version>
    </dependency>

  • 代码
  •  public static void main( String[] args )
    {
    AccessToken token= GetAccessToken();
    SQLServerDataSource ds = new SQLServerDataSource();

    ds.setServerName("<>.database.windows.net"); // Replace with your server name.
    ds.setDatabaseName("demo"); // Replace with your database name.
    ds.setAccessToken(token.getToken());

    try (Connection connection = ds.getConnection();
    Statement stmt = connection.createStatement();
    ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
    if (rs.next()) {
    System.out.println("You have successfully logged on as: " + rs.getString(1));
    }
    }

    }

    public static AccessToken GetAccessToken() {
    DefaultAzureCredential creds = new DefaultAzureCredentialBuilder()
    .build();
    TokenRequestContext request = new TokenRequestContext();
    System.out.println("444");
    request.addScopes("https://database.windows.net//.default");
    String token;
    AccessToken accesstoken=creds.getToken(request).block();

    return accesstoken;




    }

    关于java - 本地计算机连接到 Azure Active Directory,以便我们可以访问 ActiveDirectoryMSI 身份验证以及 I​​MDS SERVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62513972/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com