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

时间:2017-01-24 01:57:45

标签: azure authentication oauth-2.0 jmeter jmeter-plugins

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

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

2 个答案:

答案 0 :(得分:6)

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

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

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

    • 验证(提供客户ID和租户ID)
    • 授权(使用客户ID和上一步的代码)
    • 获取访问令牌(提供上一步的授权代码,第一步的代码和客户端ID
  3. 关于实施选项2 - 它将需要3个独立的JMeter采样器(或者您可以通过JSR223 Sampler以编程方式获取访问令牌)

    参考文献:

答案 1 :(得分:0)

作为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;

}