当前位置: 首页 > 知识库问答 >
问题:

通用域名格式。微软sqlserver。jdbc。SQLServerException:MSI令牌失败:无法从MSIendpoint获取令牌

阳文轩
2023-03-14

我想使用带有MSI(托管服务标识)身份验证的应用程序服务API(Java)访问Azure SQL数据库。

我试图找出如何连接Azure sql与MSI从Azure应用服务Java。

这是我正在使用的连接字符串

jdbc:sqlserver://mysqldb.database.windows.net:1433;数据库=TestDB;身份验证=ActiveDirectoryMsi;加密=true;信任服务器证书=false;主机名证书=*.database.windows.net; loginTimeout=30;

下面是我使用的步骤:

>

CREATE USER [myAADgroup] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [myAADgroup];
ALTER ROLE db_datawriter ADD MEMBER [myAADgroup];
ALTER ROLE db_ddladmin ADD MEMBER [myAADgroup];

JDBC驱动程序的连接字符串。

共有2个答案

梁丘缪文
2023-03-14

我和微软团队一起工作,他们确认JDBC库(mssql-jdbc)是问题所在,他们正在解决这个问题。我有一个变化来测试他们的预览JDBC库,它正在按预期工作。因此,JDBC库的下一个版本将解决这个问题。

童琪
2023-03-14

我在当地进行了测试,获得了成功。以下是我的步骤供您参考:

在这里,我将使用函数应用程序。

然后将状态设置为打开并保存。您将获得一个对象ID。

在这里,我将我的应用部署到函数应用。样本:

public class Function {

    @FunctionName("HttpTrigger-Java")
    public HttpResponseMessage run(@HttpTrigger(name = "req", methods = {
            HttpMethod.GET }, authLevel = AuthorizationLevel.ANONYMOUS) HttpRequestMessage<Optional<String>> request,
            final ExecutionContext context) {

        String result = "";

        SQLServerDataSource ds = new SQLServerDataSource();
        ds.setServerName("jacksqldemo.database.windows.net"); // Replace with your server name
        ds.setDatabaseName("sqldemo"); // Replace with your database name
        ds.setAuthentication("ActiveDirectoryMSI");

        try (Connection connection = ds.getConnection(); 
                Statement stmt = connection.createStatement();
                ResultSet rs = stmt.executeQuery("SELECT SUSER_SNAME()")) {
            if (rs.next()) {
                String s = rs.getString(1);
                context.getLogger().info("You have successfully logged on as: " + s);
                result += "You have successfully logged on as: " + s;
            }
        }catch(Exception e){
            context.getLogger().log(Level.WARNING, e.getMessage(),e);
        }
        return request.createResponseBuilder(HttpStatus.OK).body(result).build();
    }
}

最后,我可以连接到Azure SQL:

 类似资料:
  • 问题内容: 对于Swift3 / iOS10,请参见以下链接: ios10,Swift3和Firebase推送通知(FCM) 我正在尝试使用Firebase进行通知,并且完全按照文档中的说明进行了集成。但是我不明白为什么它不起作用。在构建项目时,我看到以下行: 这是我的AppDelegate: 问题答案: 1.在 didFinishLaunchingWithOptions 方法中设置Notific

  • 我用JHipster 5.1.0生成了一个UAA服务器。我选择PostgreSQL作为数据库类型。 它连接到我的jhipster注册表,然后我生成了一个微服务和一个网关,如下所示: 启动网关进行用户登录后,它无法获取访问令牌并引发错误: 2018-07-23 17:32:53.378调试7228---[XNIO-2 task-10]c.c.c.a.g.a.AccessControlFilter:访

  • 目前访问类型处于联机状态。当我需要访问驱动器上的文件/文件夹时,我将浏览器重定向到Google URL并获得访问代码: 一切运转良好!但我只需要第一次重定向。 当我谷歌时,在google Drive API文档中,我发现我可以通过浏览器重定向获得刷新令牌,并将其保存在数据库中。(换句话说,我可以使用脱机访问)。 而且每次当我需要从google drive读取数据时,我使用刷新令牌获得访问令牌,而无

  • 我正在处理react native Expo的推送通知。我刚刚开始,无法获得世博推送通知令牌。我添加了以下代码: 并收到错误“[未处理的承诺拒绝:错误:Expo push notification service仅支持Expo项目。请确保您已登录到正在加载项目的计算机上的Expo developer帐户。]”。 我正在Expo应用程序中运行该项目,我已经在Expo上创建了一个帐户,但仍然没有得到令

  • 我试图使用请求模块向https://accounts.spotify.com/api/token发出POST请求,以便获得访问令牌。我已经用我的Spotify开发帐户注册了重定向URI。这是我的快速<代码>/重定向 路由。 有人能看到这里可能出了什么问题吗?每次我得到的都是一个不伦不类的“哎呀!出了问题”错误页面。

  • 我试图通过一个到Spring(基本身份验证)安全RESTAPI的绝对URL发出POST请求 读到Angular没有为绝对URL自动将X-XSRF-TOKEN插入请求头之后,我尝试实现一个HttpInterceptor来添加TOKEN。 在我最初的 /signinPOST请求中,我创建了必要的授权:基本标头,以确保Spring验证请求。 返回的响应标头包含预期的set-cookie令牌: 但是,在我