2016-11-02 2 views
3

토큰을 제한하여 토큰 유효성 요청 당 20K를 만들 수 있습니까? 내 사용 사례는 다음과 같습니다. 년 유효 기간 및 토큰 한계 당 20K의 사용자 토큰 제공.WSO2 API 관리자 - 토큰 제한 사항 20KPerToken

도움을 주셔서 감사합니다.

편집 : 내가 추가 해요 응용 프로그램 제한 20PerYear 내가 원하는대로 내가뿐만 아니라 20

사용 사례를 많은 요청을 실행할 수 있기 때문에, 그것이 작동하지 않습니다 유효성 -1과 토큰을 생성 : I 시간에 의존하지 않고 내 API에 클라이언트 20K 요청을 판매하려고합니다. 어쩌면 WSO2는 나의 유스 케이스에 대한 다른 해결책을 가지고 있을까?

UPDATE : 5PerAllTime Application

3) 생성으로 새로운 창조를위한 생산 토큰을 토큰 쿼터 당 새 만든 응용 프로그램의 AllTime 선택) Admin

2 : 나는 5PerAllTime 응용 프로그램 계층을 추가

1) 응용 프로그램 AllTime with 유효 기간 -1

2) 응용 프로그램에 PizzaShackAPI를 추가하십시오

4) 많은 메뉴 GET 요청하지만, 어떤 제한이 표시되지 않습니다 : 내가 잘못 뭐하는 거지

\?

해결책 :

모든 작업. 나는 Windows에서, 그리고 난 새로운 응용 프로그램 계층 추가 해요 때, 뭔가 나쁜 Windows에서 filepaths 일어나고 로그에보고 : 내가 선택 상자에 내 응용 프로그램 계층을 볼 수있는 오류 후

TID: [-1234] [] [2016-11-03 10:02:36,113] ERROR {org.apache.axis2.rpc.receivers.RPCMessageReceiver} - Illegal char <:> at index 2: /D:/taras2/wso2/WSO2AM~1.0/bin/../repository/deployment/server/\executionplans {org.apache.axis2.rpc.receivers.RPCMessageReceiver} 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) 
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) 
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) 
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:173) 
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) 
    at org.wso2.carbon.core.transports.CarbonServlet.doPost(CarbonServlet.java:231) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:88) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.wso2.carbon.ui.filters.CSRFPreventionFilter.doFilter(CSRFPreventionFilter.java:88) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.wso2.carbon.ui.filters.CRLFPreventionFilter.doFilter(CRLFPreventionFilter.java:59) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:120) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99) 
    at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47) 
    at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57) 
    at org.wso2.carbon.event.receiver.core.internal.tenantmgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:48) 
    at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) 
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62) 
    at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1749) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1708) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 2: /D:/taras2/wso2/WSO2AM~1.0/bin/../repository/deployment/server/\executionplans 
    at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) 
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) 
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) 
    at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94) 
    at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255) 
    at java.nio.file.Paths.get(Paths.java:84) 
    at org.wso2.carbon.event.processor.core.internal.util.EventProcessorUtil.validateFilePath(EventProcessorUtil.java:387) 
    at org.wso2.carbon.event.processor.core.internal.util.EventProcessorConfigurationFilesystemInvoker.save(EventProcessorConfigurationFilesystemInvoker.java:77) 
    at org.wso2.carbon.event.processor.core.internal.CarbonEventProcessorService.deployExecutionPlan(CarbonEventProcessorService.java:127) 
    at org.wso2.carbon.event.processor.admin.EventProcessorAdminService.deployExecutionPlan(EventProcessorAdminService.java:53) 
    ... 63 more 

을하지만,이 내 계층 및 제한 사항이 작동하지 않는 시스템의 파일이 없습니다. 그래서 파일 경로 $ {carbon.home}/repository/deployment/server/executionplans에이 파일을 수동으로 추가했습니다. (carbon.super_app_20KPerYear.siddhiql 이름) 20KPerYear 새로운 실행 계획의

예 :

/* Enter a unique ExecutionPlan */ 
@Plan:name('carbon.super_app_20KPerYear') 

/* Enter a unique description for ExecutionPlan */ 
@Plan:description('Allows 20K request per year') 

/* define streams/tables and write queries here ... */ 

@Import('org.wso2.throttle.processed.request.stream:1.0.0') 
define stream RequestStream (messageID string, appKey string, appTier string, subscriptionKey string, apiKey string, apiTier string, subscriptionTier string, resourceKey string, resourceTier string, userId string, apiContext string, apiVersion string, appTenant string, apiTenant string, appId string, apiName string, propertiesMap string); 

@Export('org.wso2.throttle.globalThrottle.stream:1.0.0') 
define stream GlobalThrottleStream (throttleKey string, isThrottled bool, expiryTimeStamp long); 

FROM RequestStream 
SELECT messageID, (appTenant == 'carbon.super' and appTier == '20KPerYear') AS isEligible, appKey AS throttleKey 
INSERT INTO EligibilityStream; 

FROM EligibilityStream[isEligible==true]#throttler:timeBatch(1 year, 0) 
select throttleKey, (count(messageID) >= 20000) as isThrottled, expiryTimeStamp 
group by throttleKey 
INSERT ALL EVENTS into ResultStream; 

from ResultStream#throttler:emitOnStateChange(throttleKey, isThrottled) 
select * 
insert into GlobalThrottleStream; 

답변

1

당신은이에 대한 Application Level 제한 정책을 설정할 수 있습니다. 자세한 내용은 here을 참조하십시오.

업데이트 : 연간 요청 수를 제한하려면 제한 수준을 20kPerYear로 설정할 수 있습니다. 1 년 후에 토큰을 만료 시키려면 AccessTokenDefaultValidityPeriodidentity.xml으로 설정할 수 있습니다.

방금 ​​20perYear 한도로 시도해 보았습니다. 정상적으로 작동하는지 확인했습니다. 이 응답으로 약 21-22 요청 요청이 실패한 후

{"fault":{"code":900803,"message":"Message throttled out","description":"You have 
exceeded your quota","nextAccessTime":"2016-Dec-20 00:00:00+0000 UTC"}} 

스로틀 링은 비동기식으로 작동하기 때문에 20 회의 요청 후에 정확하게 스로틀 링하지 않을 수 있습니다. 작은 버퍼가있을 것입니다.

+0

나는 그것에 대해 알고있다. 하지만 정확히 무엇을 설정해야합니까? 20KPerYear 응용 프로그램 수준 스로틀 링? 그리고 내 경우에는 1 년 동안 토큰을 생성합니까? –

+0

예, 답변을 업데이트했습니다. – Bee

+0

감사합니다. 내일 해결책을 찾아 보겠습니다. 시간 제한없이 20PerUser 액세스는 어떻습니까? (내 질문에 편집 같은) –