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

使用Azure Active Directory时Azure Devops REST API

拓拔俊艾
2023-03-14

我使用adal4j Java库通过Azure Active Directory对Azure DevOps REST API调用进行身份验证。我可以使用个人访问令牌进行身份验证,但不能使用Active Directory。这是我一直在运行的代码:

AuthenticationResult result = null;
ExecutorService service = null;
try {
  service = Executors.newFixedThreadPool(1);
  AuthenticationContext context = new AuthenticationContext("https://login.microsoftonline.com/" + tenantId + "/", false, service);
  if (clientId != null && clientKey != null) {
    ClientCredential credentials = new ClientCredential(clientId, clientKey);
    Future<AuthenticationResult> future = context.acquireToken("499b84ac-1321-427f-aa17-267ca6975798", credentials, null);
    result = future.get();
  }
} finally {
  if (service != null) {
    service.shutdown();
  }
}

我已经使用正确的目录/租户从Azure DevOps组织设置连接到Azure Active Directory。我还在应用程序注册中添加了Azure DevOps user_impersonation权限(委派)。

我在这里做错了什么?我如何解决这个问题?

共有1个答案

卫博学
2023-03-14

user_impersonation意味着只能使用用户权限调用此API。但是,您将获得带有客户端凭据的令牌,而客户端凭据仅具有应用程序权限。

要获取用户的令牌,可以尝试以下代码:

    public static AuthenticationResult GetToeknWithPasswordForDevOps(String username, String password){
        ExecutorService service = Executors.newFixedThreadPool(1);
        AuthenticationContext context = null;
        AuthenticationResult result = null;
        try {
            context = new AuthenticationContext(AUTHORITY, true, service);
            Future<AuthenticationResult> future = context.acquireToken("499b84ac-1321-427f-aa17-267ca6975798", "{your publuc app client id}", username, password, null);
            result = future.get();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } finally {
            service.shutdown();
        }
        return result;
    }
 类似资料:
  • 我正在尝试使用microsoft graph api创建联机会议,而无需登录到AzureActiveDirectory和ASP.NET web应用程序。为此,我的应用程序具有以下权限,这些权限是文档https://docs.microsoft.com/en-us/graph/api/application-post-onlineemetings所需的?view=graph-rest-1.0&tab

  • 有没有办法在使用 jongo 查询 MongoDB 时添加 ?我发现这样的错误 - '排序超出了 104857600 字节的内存限制,但没有选择加入外部排序。正在中止操作。传递 allowDiskUse:true 可以选择加入,可以通过以下方式阻止,您的聚合看起来像 但据我所知,Jongo 中的类仅将管道应用于自身,然后您可以使用 方法执行。 是否有任何方法可以将该参数传递给mongo而不从Jon

  • 问题内容: 我使用spring数据和方法来获取模型。调用此方法时如何使用查询提示? 上面的源代码工作正常,但是我不能为我的JPA提供程序(在我的情况下为EclipseLink)设置QueryHint。 以上是我使用spring-data使用查询提示的方式, 我还发现了这个尚未解决的问题。 问题答案: 当我想使用spring-data创建查询时,请遵循上述算法。 1)是否已经提供的查询 通过弹簧数据

  • 我使用spring数据和方法获取模型。调用此方法时如何使用查询提示 上面的源代码运行良好,但我无法为我的JPA提供者(在我的例子中是EclipseLink)设置QueryHint。 我使用spring数据使用查询提示的方式如下:, 我也发现这个还没有解决。

  • 我尝试使用MockWebServer对我的应用编程接口的各种响应。我做了一个简单的例子,只是为了尝试我想做的是一种工作方法。 mockWebServer不是要“模拟”我的http连接的endpoint吗?像真正的服务器?每当我试图打电话时,我都会感到莫名其妙的惊讶。 我用错了吗?它不应该只是替换服务器的响应吗?(嘲笑) E D I T: 我在清单上有互联网许可。 我使用: 代码: Logcat:

  • 问题内容: 我一直在nodejs中编程,研究了如何同时使用socket.io和对节点服务器的ajax调用。socket.io是否设计为替代ajax?我很好奇,在哪种情况下使用socket.io更好,而哪种ajax更好。感谢您的输入。 问题答案: 好吧,Web套接字(通过socket.io)提供的主要内容之一就是ajax缺乏的是服务器推送。因此,对于ajax,如果您想了解服务器上的新事件(例如,另一

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 我和我的团队一直在使用Spring boot开发一系列微服务。由于服务经历了JUnit和Spring Boot升级(我们现在使用的是Spring Boot 2和JUnit 5),不同开发人员实现的不同JUnit现在使用不同的模式: @扩展为 今天,它们之间的区别是什么?我们真的需要它们来进行单元测试还是嵌入到一些新的Spring Boot注释中?