如何在 JMeter 中进行 OAuth 2.0 身份验证?

How to do a OAuth 2.0 authentication in JMeter?

我正在尝试对一些需要进行身份验证的 API (OAuth 2.0) 进行功能测试,并在 JMeter 中对其进行模拟。

我正在尝试验证 Azure 云的 OAuth 服务。有没有人能够成功创建 JMeter HTTP 请求以针对 OAuth 2.0 进行身份验证?

基本上,您需要添加 HTTP Header Manager 以发送 Authorization header 和 Bearer ${ACCESS_TOKEN} 的值,以便进行经过身份验证的 OAuth API 调用。

可以通过两种主要方式获取访问令牌:

  1. 以某种方式获取它(请求它,使用您需要模拟的嗅探器工具和应用程序捕获它等),但请注意 OAuth 访问令牌有 limited life span(默认情况下为 1 小时,这适用也指向第 2 点)
  2. 在您的测试中实施 OAuth2 流程,即:

    • 身份验证(提供客户端 ID 和租户 ID)
    • 授权(使用客户端 ID 和上一步的代码)
    • 获取访问令牌(提供上一步的授权代码、第一步的代码和客户端 ID

关于实施选项 2 - 它将需要 3 个单独的 JMeter 采样器(或者您可以通过 JSR223 Sampler 以编程方式获取访问令牌)

参考文献:

作为API测试自动化的一部分,我们确实创建了本机客户端 ID,将所需资源分配给本机客户端。

所有你需要的 adal4j-1。6.X.jar

public static AuthenticationResult getAuthToken(String username, String password, 
String clientId, String authority, String tenant, String urii) throws Throwable {

    AuthenticationContext context = null;
    AuthenticationResult result = null;
    ExecutorService service = null;

    crypToUtil td= new crypToUtil();
    crypToUtil cryptoUtil = new crypToUtil(); 

    password = cryptoUtil.decrypt(password);

    try {

        service = Executors.newFixedThreadPool(1);
        context = new AuthenticationContext(authority + tenant + "/", true,service);
        Future<AuthenticationResult> future = context.acquireToken(urii, clientId, username, password,null);
        result = future.get();                

    } catch (ExecutionException | MalformedURLException e) {

        throw e.getCause();

    } finally {

        service.shutdown();

    }

    if (result == null) {

        throw new ServiceUnavailableException("authentication result was null, could be your input data were wrong ...");

    }

    return result;

}