Search in sources :

Example 1 with RpcAuthenticationException

use of org.apache.dubbo.auth.exception.RpcAuthenticationException in project dubbo by alibaba.

the class AccessKeyAuthenticator method authenticate.

@Override
public void authenticate(Invocation invocation, URL url) throws RpcAuthenticationException {
    String accessKeyId = String.valueOf(invocation.getAttachment(Constants.AK_KEY));
    String requestTimestamp = String.valueOf(invocation.getAttachment(Constants.REQUEST_TIMESTAMP_KEY));
    String originSignature = String.valueOf(invocation.getAttachment(Constants.REQUEST_SIGNATURE_KEY));
    String consumer = String.valueOf(invocation.getAttachment(CommonConstants.CONSUMER));
    if (StringUtils.isEmpty(accessKeyId) || StringUtils.isEmpty(consumer) || StringUtils.isEmpty(requestTimestamp) || StringUtils.isEmpty(originSignature)) {
        throw new RpcAuthenticationException("Failed to authenticate, maybe consumer not enable the auth");
    }
    AccessKeyPair accessKeyPair = null;
    try {
        accessKeyPair = getAccessKeyPair(invocation, url);
    } catch (Exception e) {
        throw new RpcAuthenticationException("Failed to authenticate , can't load the accessKeyPair", e);
    }
    String computeSignature = getSignature(url, invocation, accessKeyPair.getSecretKey(), requestTimestamp);
    boolean success = computeSignature.equals(originSignature);
    if (!success) {
        throw new RpcAuthenticationException("Failed to authenticate, signature is not correct");
    }
}
Also used : AccessKeyPair(org.apache.dubbo.auth.model.AccessKeyPair) RpcAuthenticationException(org.apache.dubbo.auth.exception.RpcAuthenticationException) RpcAuthenticationException(org.apache.dubbo.auth.exception.RpcAuthenticationException) AccessKeyNotFoundException(org.apache.dubbo.auth.exception.AccessKeyNotFoundException)

Example 2 with RpcAuthenticationException

use of org.apache.dubbo.auth.exception.RpcAuthenticationException in project dubbo by alibaba.

the class ProviderAuthFilterTest method testAuthFailedWhenParameterError.

@Test
void testAuthFailedWhenParameterError() {
    String service = "org.apache.dubbo.DemoService";
    String method = "test";
    Object[] originalParams = new Object[] { "dubbo1", "dubbo2" };
    long currentTimeMillis = System.currentTimeMillis();
    URL url = URL.valueOf("dubbo://10.10.10.10:2181").setServiceInterface(service).addParameter(Constants.ACCESS_KEY_ID_KEY, "ak").addParameter(Constants.SECRET_ACCESS_KEY_KEY, "sk").addParameter(CommonConstants.APPLICATION_KEY, "test-provider").addParameter(Constants.PARAMETER_SIGNATURE_ENABLE_KEY, true).addParameter(Constants.SERVICE_AUTH, true);
    Invoker invoker = mock(Invoker.class);
    Invocation invocation = mock(Invocation.class);
    when(invocation.getObjectAttachment(Constants.AK_KEY)).thenReturn("ak");
    when(invocation.getObjectAttachment(CommonConstants.CONSUMER)).thenReturn("test-consumer");
    when(invocation.getObjectAttachment(Constants.REQUEST_TIMESTAMP_KEY)).thenReturn(currentTimeMillis);
    when(invocation.getMethodName()).thenReturn(method);
    Object[] fakeParams = new Object[] { "dubbo1", "dubbo3" };
    when(invocation.getArguments()).thenReturn(fakeParams);
    when(invoker.getUrl()).thenReturn(url);
    String requestString = String.format(Constants.SIGNATURE_STRING_FORMAT, url.getColonSeparatedKey(), invocation.getMethodName(), "sk", currentTimeMillis);
    String sign = SignatureUtils.sign(originalParams, requestString, "sk");
    when(invocation.getObjectAttachment(Constants.REQUEST_SIGNATURE_KEY)).thenReturn(sign);
    ProviderAuthFilter providerAuthFilter = new ProviderAuthFilter();
    Result result = providerAuthFilter.invoke(invoker, invocation);
    assertTrue(result.hasException());
    assertTrue(result.getException() instanceof RpcAuthenticationException);
}
Also used : Invoker(org.apache.dubbo.rpc.Invoker) Invocation(org.apache.dubbo.rpc.Invocation) RpcAuthenticationException(org.apache.dubbo.auth.exception.RpcAuthenticationException) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) URL(org.apache.dubbo.common.URL) Result(org.apache.dubbo.rpc.Result) Test(org.junit.jupiter.api.Test)

Example 3 with RpcAuthenticationException

use of org.apache.dubbo.auth.exception.RpcAuthenticationException in project dubbo by alibaba.

the class ProviderAuthFilterTest method testAuthFailedWhenNoAccessKeyPair.

@Test
void testAuthFailedWhenNoAccessKeyPair() {
    URL url = URL.valueOf("dubbo://10.10.10.10:2181").addParameter(CommonConstants.APPLICATION_KEY, "test-provider").addParameter(Constants.SERVICE_AUTH, true);
    Invoker invoker = mock(Invoker.class);
    Invocation invocation = mock(Invocation.class);
    when(invocation.getObjectAttachment(Constants.REQUEST_SIGNATURE_KEY)).thenReturn("dubbo");
    when(invocation.getObjectAttachment(Constants.AK_KEY)).thenReturn("ak");
    when(invocation.getObjectAttachment(CommonConstants.CONSUMER)).thenReturn("test-consumer");
    when(invocation.getObjectAttachment(Constants.REQUEST_TIMESTAMP_KEY)).thenReturn(System.currentTimeMillis());
    when(invoker.getUrl()).thenReturn(url);
    ProviderAuthFilter providerAuthFilter = new ProviderAuthFilter();
    Result result = providerAuthFilter.invoke(invoker, invocation);
    assertTrue(result.hasException());
    assertTrue(result.getException() instanceof RpcAuthenticationException);
}
Also used : Invoker(org.apache.dubbo.rpc.Invoker) Invocation(org.apache.dubbo.rpc.Invocation) RpcAuthenticationException(org.apache.dubbo.auth.exception.RpcAuthenticationException) URL(org.apache.dubbo.common.URL) Result(org.apache.dubbo.rpc.Result) Test(org.junit.jupiter.api.Test)

Aggregations

RpcAuthenticationException (org.apache.dubbo.auth.exception.RpcAuthenticationException)3 URL (org.apache.dubbo.common.URL)2 Invocation (org.apache.dubbo.rpc.Invocation)2 Invoker (org.apache.dubbo.rpc.Invoker)2 Result (org.apache.dubbo.rpc.Result)2 Test (org.junit.jupiter.api.Test)2 AccessKeyNotFoundException (org.apache.dubbo.auth.exception.AccessKeyNotFoundException)1 AccessKeyPair (org.apache.dubbo.auth.model.AccessKeyPair)1 ArgumentMatchers.anyString (org.mockito.ArgumentMatchers.anyString)1