首页 文章

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

提问于
浏览
1

目前正在使用WSO2 API Manager 2.2.0版 . OAuth 2.0的实现非常好 .

当我们通过WSO2 API Store定义新的Application时,我们能够生成Consumer Key和Secret,并选择Grant Type来生成Access Token . 之后我们应该订阅带有一些Subscription Tier的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将是我的enitity标识(Writing Custom Handlers) .

此外,我希望获得应用程序设置和订阅层的好处,以便为使用X.509证书调用API的不同实体管理此类属性 . 使用上面提到的调用它不起作用,因为我没有任何 apiKey .

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

有什么建议可以吗?

2 回答

  • 0

    除非您使用请求本身发送该信息,否则无法在没有令牌的情况下找到订阅或应用程序详细信息 . 如果没有令牌,您只能知道API是什么,但您不知道该应用是什么 .

  • 0

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

相关问题