WSO2 API Manager获得没有API密钥/令牌的订阅层

时间:2018-07-04 04:51:04

标签: authentication wso2 access-token wso2-am x509

当前正在使用WSO2 API Manager版本2.2.0。 OAuth 2.0的实现非常好。

当我们通过WSO2 API商店定义新的应用程序时,我们能够生成使用者密钥和机密信息,并选择“授予类型”来生成访问令牌。之后,我们应该使用一些订阅层订阅API。

然后在API调用期间授权访问令牌(也称为API密钥)。访问令牌链接到属性,然后将这些属性放入AuthenticationContext中,例如org.wso2.carbon.apimgt.gateway.handlers.security.oauth.OAuthAuthenticator.java中的以下摘录:

APIKeyValidationInfoDTO info;
info = keyValidator.getKeyValidationInfo(apiContext, apiKey, apiVersion, authenticationScheme, clientDomain,
                    matchingResource, httpMethod, defaultVersionInvoked);
if (info.isAuthorized()) {
            AuthenticationContext authContext = new AuthenticationContext();
            authContext.setAuthenticated(true);
            authContext.setTier(info.getTier());
            authContext.setApiKey(apiKey);
            authContext.setKeyType(info.getType());
            authContext.setUsername(info.getEndUserName());
            authContext.setCallerToken(info.getEndUserToken());
            authContext.setApplicationId(info.getApplicationId());
            authContext.setApplicationName(info.getApplicationName());
            authContext.setApplicationTier(info.getApplicationTier());
            authContext.setSubscriber(info.getSubscriber());
            authContext.setConsumerKey(info.getConsumerKey());
            APISecurityUtils.setAuthenticationContext(synCtx, authContext, securityContextHeader);

这工作得很好,但是现在,我想拥有自己的自定义身份验证处理程序,该处理程序不基于访问令牌,而是基于X.509证书,其中CN将是我对身份的识别(Writing Custom Handlers )。

而且,我想受益于应用程序设置和订阅层,以便为使用X.509证书调用API的不同实体管理此类属性。使用上面提到的呼叫无法正常工作,因为我没有任何apiKey

我正在尝试找到一种方法,该方法如何从X.509证书而不是访问令牌中获取带有标识的应用程序API数据,以设置订阅层和其他AuthenticationContext属性。

有什么建议可以做到吗?

2 个答案:

答案 0 :(得分:0)

除非没有请求本身发送的信息,否则没有令牌就无法找到订阅或应用程序的详细信息。没有令牌,您只能知道API是什么,但不知道应用程序是什么。

答案 1 :(得分:0)

这些属性是必需的,因为它们用于在节流处理程序中对应用程序和订阅级别进行节流。 您可以做的是在证书中设置一些属性,例如commonNameAtribute(CN)作为应用程序名称,将客户端ip(从messageContext获取)作为应用程序ID。因此,应用程序级别限制将起作用,而无需在商店中创建应用程序。将应用程序层设置为商店中任何可用的可用应用程序层之一。 将使用者密钥设置为null,并将订户也设置为commonNameAtribute。 并且您可以重写DefaultKeyValidationHandler以便跳过订阅验证。可以在api-manager.xml中配置此类。