ꡬλ κ²μ¦μ κ²½μ° κ²μ΄νΈμ¨μ΄λ ν€ κ΄λ¦¬μ λ Έλμμ μ€ν μ€μΈ ν€ κ²μ¦ μλΉμ€λ₯Ό νΈμΆνκ³ ν€ κ΄λ¦¬μλ λ°μ΄ν°λ² μ΄μ€μ μ‘μΈμ€νμ¬ κ²μ¦μ νμν λ°μ΄ν°λ₯Ό κ²μν©λλ€.
λ°μ΄ν°λ² μ΄μ€ μ€λ₯μ κ²½μ° λ°νμμ μμ²μ΄ μ€ν¨ν κ°λ₯μ±μ΄ μμ΅λλ€.
μλ² μμ μ λ° ν
λνΈμ λν ν
λνΈ λ‘λ μ λ©λͺ¨λ¦¬μ λν ꡬλ
μ ν¨μ± κ²μ¬μ νμν λ‘λ μ 보.
μ ν리μΌμ΄μ
μμ±κ³Ό κ°μ μ
λ°μ΄νΈμ κ²½μ° κ΅¬λ
μ μΆκ°νλ©΄ μ΄λ²€νΈλ₯Ό ν΅ν΄ νΈλν½ κ΄λ¦¬μμ μλ¦Όμ΄ μ μ‘λ©λλ€.
κ²μ΄νΈμ¨μ΄λ μ£Όμ λ₯Ό ν΅ν΄ μ΄ μ΄λ²€νΈλ₯Ό ꡬλ
ν©λλ€.
@isharac
μλ² μμ μ λ° ν λνΈμ λν ν λνΈ λ‘λ μ λ©λͺ¨λ¦¬μ λν ꡬλ μ ν¨μ± κ²μ¬μ νμν λ‘λ μ 보.
PR wso2/carbon-apimgt#8563μμλ μλΉμ€κ° νμ¬ λ³΄μλμ§ μμ΅λλ€. μ΄λ¬ν μλΉμ€λ μ΄λ»κ² 보νΈλ©λκΉ? κΈ°λ³Έ μΈμ¦ λλ OAuth?
@isharac @chamilaadhi
λν μ΄ λ³κ²½μΌλ‘ μΈν΄ JWT λ° ν€ μ ν¨μ± κ²μ¬ μλ΅ νμ΄λ‘λ μλμμ μ νν μ΄λ€ μμ±μ μκ² λ κΉμ?JWT:
{
"aud": "http://org.wso2.apimgt/gateway",
"sub": "[email protected]",
"application": {
"owner": "admin",
"tierQuotaType": "requestCount",
"tier": "10PerMin",
"name": "New App",
"id": 2,
"uuid": null
},
"scope": "am_application_scope default",
"iss": "https://localhost:9443/oauth2/token",
"tierInfo": {
"Unlimited": {
"tierQuotaType": "requestCount",
"stopOnQuotaReach": true,
"spikeArrestLimit": 0,
"spikeArrestUnit": null
}
},
"keytype": "PRODUCTION",
"subscribedAPIs": [
{
"subscriberTenantDomain": "carbon.super",
"name": "PizzaShackAPI",
"context": "/pizzashack/1.0.0",
"publisher": "admin",
"version": "1.0.0",
"subscriptionTier": "Unlimited"
}
],
"consumerKey": "some_value",
"exp": 3738643151,
"iat": 1591159504,
"jti": "some_valu2"
}
ν€ κ²μ¦ μλ΅
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns:validateKeyResponse xmlns:ns="http://org.apache.axis2/xsd">
<ns:return xmlns:ax2129="http://keymgt.apimgt.carbon.wso2.org/xsd"
xmlns:ax2131="http://api.apimgt.carbon.wso2.org/xsd"
xmlns:ax2133="http://dto.impl.apimgt.carbon.wso2.org/xsd"
xmlns:ax2135="http://model.api.apimgt.carbon.wso2.org/xsd"
xmlns:ax2136="http://dto.api.apimgt.carbon.wso2.org/xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax2133:APIKeyValidationInfoDTO">
<ax2133:apiName>$APINAME</ax2133:apiName>
<ax2133:apiPublisher>admin</ax2133:apiPublisher>
<ax2133:apiTier xsi:nil="true" />
<ax2133:applicationId>$APPLICATION_ID</ax2133:applicationId>
<ax2133:applicationName>$APPLICATION_NAME</ax2133:applicationName>
<ax2133:applicationTier>$APPLICATION_TIER</ax2133:applicationTier>
<ax2133:authorized>true</ax2133:authorized>
<ax2133:authorizedDomains xsi:nil="true" />
<ax2133:consumerKey>fxzmLefepgKF2Qa</ax2133:consumerKey>
<ax2133:contentAware>false</ax2133:contentAware>
<ax2133:endUserName>[email protected]</ax2133:endUserName>
<ax2133:endUserToken xsi:nil="true" />
<ax2133:issuedTime>15288163</ax2133:issuedTime>
<ax2133:scopes>default</ax2133:scopes>
<ax2133:scopes>am_application_scope</ax2133:scopes>
<ax2133:spikeArrestLimit>0</ax2133:spikeArrestLimit>
<ax2133:spikeArrestUnit xsi:nil="true" />
<ax2133:stopOnQuotaReach>true</ax2133:stopOnQuotaReach>
<ax2133:subscriber>admin</ax2133:subscriber>
<ax2133:subscriberTenantDomain>carbon.super</ax2133:subscriberTenantDomain>
<ax2133:throttlingDataList>api_level_throttling_key</ax2133:throttlingDataList>
<ax2133:tier>$TIER</ax2133:tier>
<ax2133:type>$KEY_TYPE</ax2133:type>
<ax2133:userType>APPLICATION</ax2133:userType>
<ax2133:validationStatus>0</ax2133:validationStatus>
<ax2133:validityPeriod>9223376854775807</ax2133:validityPeriod>
</ns:return>
</ns:validateKeyResponse>
</soapenv:Body>
</soapenv:Envelope>
@isharac
μλ² μμ μ λ° ν λνΈμ λν ν λνΈ λ‘λ μ λ©λͺ¨λ¦¬μ λν ꡬλ μ ν¨μ± κ²μ¬μ νμν λ‘λ μ 보.
PR wso2/carbon-apimgt#8563 μμλ μλΉμ€κ° νμ¬ λ³΄μλμ§ μμ΅λλ€. μ΄λ¬ν μλΉμ€λ μ΄λ»κ² 보νΈλ©λκΉ? κΈ°λ³Έ μΈμ¦ λλ OAuth?
μ΄κ²μ κΈ°λ³Έ μΈμ¦μΌλ‘ 보νΈλ©λλ€.
@praminda μ°λ¦¬λ μ΄ λ³κ²½ νμ Oauth 곡κΈμλ‘λΆν° μ¨ JWTμ νμ€ JWT ν΄λ μλ§ κ°κ² λ©λλ€.
νμΈ. λ°λΌμ JWTμμ μλ μμ±μ μκ² λ©λλ€.
"application": {},
"tierInfo": {},
"keytype": "",
"subscribedAPIs": [],
λ€μ μμ±λ§ ν€ μ ν¨μ± κ²μ¬ μλ΅μμ μ¬μ©ν μ
<ax2133:apiName>$APINAME</ax2133:apiName>
<ax2133:apiPublisher>admin</ax2133:apiPublisher>
<ax2133:apiTier xsi:nil="true" />
<ax2133:authorized>true</ax2133:authorized>
<ax2133:authorizedDomains xsi:nil="true" />
<ax2133:consumerKey>fxzmLefepgKF2Qa</ax2133:consumerKey>
<ax2133:contentAware>false</ax2133:contentAware>
<ax2133:endUserName>[email protected]</ax2133:endUserName>
<ax2133:endUserToken xsi:nil="true" />
<ax2133:issuedTime>15288163</ax2133:issuedTime>
<ax2133:scopes>default</ax2133:scopes>
<ax2133:scopes>am_application_scope</ax2133:scopes>
<ax2133:userType>APPLICATION</ax2133:userType>
<ax2133:validationStatus>0</ax2133:validationStatus>
<ax2133:validityPeriod>9223376854775807</ax2133:validityPeriod>
μ΄κ²μ ꡬνλ©λλ€.
μ¬μ©μκ° μ΄ λμμ ꡬμ±ν μ μλλ‘ νμ©ν μ§ μ¬λΆμ λν κ³ λ € μ¬νμ΄ μμ΅λκΉ? JMS ꡬλ μ μμ‘΄νμ¬ μ΅μ μνλ₯Ό μ μ§νλ κ²λ³΄λ€ JWTμ λͺ¨λ μ 보λ₯Ό μ»μ μ μλ κ²μ΄ ν¨μ¬ λ«μ΅λλ€. λλ μ μ΄λ λ°μ΄ν°λ² μ΄μ€μ λͺ¨λ ꡬλ μΌλ‘ JWTλ₯Ό μμ±νλ λ°©λ²μ 무μμ λκΉ? (νΉν micro-gwμ ν¨κ» μ¬μ©νλ κ²½μ°).
μλ
νμΈμ @christian-morin
μ΄κ²μ΄ νμ¬ κΈ°λ³Έ λμμ΄λ―λ‘ κ΅¬μ±ν κ³νμ΄ μμ΅λλ€.
κ·Έλ¦¬κ³ νμ¬ ν€ κ΄λ¦¬μλ ꡬλ
λ©νλ°μ΄ν°(DBκ° κ³΅μ λμ§ μμ)λ₯Ό μΈμνμ§ λͺ»νλ―λ‘ νμ¬ KMμμ μμ±λ JWTλ ꡬλ
λ°μ΄ν°λ₯Ό ν¬ν¨ν μ μμ΅λλ€.
νΉμ μꡬ μ¬νμ 곡μ ν μ μλ€λ©΄ μ루μ μ μ μν μ μμ΅λλ€.
μ°λ¦¬μ μꡬ μ¬νμ APIMκ³Ό ν¨κ» Micro-Gatewayλ₯Ό μ¬μ©νλ κ²μ λλ€. μ¬μ©μλ APIMμμ JWTλ₯Ό μμ±νκ³ μ΄λ₯Ό μ¬μ©νμ¬ κ°λ³ Micro-GW:sμ μ‘μΈμ€ν μ μμ΅λλ€. μ΄μ μλ λͺ¨λ ꡬλ APIκ° JWT λ©νλ°μ΄ν°μ μμκ³ Micro-GWμμ "μ€νλΌμΈ"μΌλ‘ νμΈν μ μμμ΅λλ€. μ΄ μλ‘μ΄ μ€μ μ μ¬μ©νλ €λ©΄ λͺ¨λ Micro-GW μΈμ€ν΄μ€κ° JMS ꡬλ μ μμ νμ¬ μ΅μ μνλ‘ μ μ§ν΄μΌ ν©λκΉ? (κ·Έλ¦¬κ³ JWTμμ ν΄λΌμ΄μΈνΈκ° μ¬μ©ν μ μλ ꡬλ μ νμΈν λ°©λ²μ΄ μμ)
μ μ¬μ μΌλ‘ μλ°± κ°μ λ§μ΄ν¬λ‘ GWκ° μλ κ²½μ° λκ΅°κ°κ° 401μ λ°λ μ΄μ λ₯Ό λλ²κΉ νλ κ²μ νΌλμ€λ¬μΈ κ²μ΄λΌκ³ μκ°ν©λλ€...ν ν½μ΄ λ±λ‘λμ§ μμμ΅λκΉ? μ΄λ₯Ό λ§λ€κΈ° μν΄ λ§μ΄ν¬λ‘ GWλ₯Ό λ€μ μμν΄μΌ ν©λκΉ? λ§μ΄ν¬λ‘-GW λͺ¨λ μ μμ μ κ°λ λ± μμ λ APIMκ° μλ΅νμ§ μλ κ²½μ° λ°μνλ λͺ¨λ μλΈ μ€ν¬λ¦½ λ©ν λ°μ΄ν° λ€μ΄λ‘λ cribedAPIμ : S λ° λ©ν λ°μ΄ν° JWT-λ©ν λ°μ΄ν°μ λΆμ°© λ μ루μ μ΄ ν¨μ¬ λ "κ°λ ₯ν"λ° μ μ Micro-GW:sλ JWTκ° λͺ¨λ μ 보λ₯Ό 보μ νκΈ° λλ¬Έμ APIMκ³Ό μλ¬΄λ° κ΄λ ¨μ΄ μμμ΅λλ€(κ·Έλ¦¬κ³ ν΄λΌμ΄μΈνΈλ ν€λ‘ μ‘μΈμ€ν μ μμλ ꡬλ μ΄ JWT λ©νλ°μ΄ν°μμ μ€μ€λ‘ νμΈν μ μμμ΅λλ€). λ°λΌμ λ΄κ° μνλ κ²μ Micro-GW:sμ ν¨κ» μ¬μ©ν μ΄μ λμ JWTλ₯Ό μμ±νλ λ°©λ²λΏμ λλ€. APIMμ μν΄ μΌλΆ JWT-Generator ν΄λμ€λ₯Ό νμ₯νμ¬ κ°λ₯ν κΉμ? (λλ μ΄ μλ‘μ΄ νΈλ€λ§μΌλ‘ μΈν΄ λ¬μ±νκΈ°κ° λ§€μ° μ΄λ ΅μ΅λκΉ?)
μλ
νμΈμ @christian-morin
κ·νμ μ¬μ© μ¬λ‘λ₯Ό μ§μνκΈ° μν΄ 2κ°μ§ μ΅μ
μ μ μν μ μμ΅λλ€.
μ΅μ
1:
MG 3.2.0κ³Ό ν¨κ» APIM 3.1.0 μ¬μ©
μ΅μ
2:
API-M 3.2.0μ μ¬μ©νκ³ [1]μ μ€λͺ
λ λλ‘ TokenIssuerλ₯Ό μ¬μ©μ μ§μ ν©λλ€.
μ΄ κ²½μ° APIM dbλ₯Ό Key Manager λ
Έλμ 곡μ ν΄μΌ νλ©° JWTμ νμν ν΄λ μμ μΆκ°ν μ μμ΅λλ€.
λμμ΄ λμκΈ°λ₯Ό λ°λλλ€!
[1] https://is.docs.wso2.com/en/latest/learn/extension-points-for-oauth/#oauth -token-generator
μλ νμΈμ @isharac
λ΅λ³ κ°μ¬ν©λλ€. μ΅μ 1μ μ°λ¦¬κ° μ νμ μ κ·Έλ μ΄λν μ μκΈ° λλ¬Έμ μμ£Ό μ’μ μ₯κΈ°μ μ루μ μ΄ μλλΌκ³ κ°μ ν©λλ€. ;)
λλ λΉμ μ΄ μ μν λλ‘ λ§μΆ€ν TokenIssuerλ₯Ό μμ±ν΄μΌ νλ€κ³ μκ°νμ§λ§ κ·Έκ²μ΄ κ°λ₯ν΄μΌ νλ€λ μ¬μ€μ μκ² λμ΄ κΈ°μ©λλ€. κ°μ¬ν©λλ€.
κ°μ₯ μ μ©ν λκΈ
μ°λ¦¬μ μꡬ μ¬νμ APIMκ³Ό ν¨κ» Micro-Gatewayλ₯Ό μ¬μ©νλ κ²μ λλ€. μ¬μ©μλ APIMμμ JWTλ₯Ό μμ±νκ³ μ΄λ₯Ό μ¬μ©νμ¬ κ°λ³ Micro-GW:sμ μ‘μΈμ€ν μ μμ΅λλ€. μ΄μ μλ λͺ¨λ ꡬλ APIκ° JWT λ©νλ°μ΄ν°μ μμκ³ Micro-GWμμ "μ€νλΌμΈ"μΌλ‘ νμΈν μ μμμ΅λλ€. μ΄ μλ‘μ΄ μ€μ μ μ¬μ©νλ €λ©΄ λͺ¨λ Micro-GW μΈμ€ν΄μ€κ° JMS ꡬλ μ μμ νμ¬ μ΅μ μνλ‘ μ μ§ν΄μΌ ν©λκΉ? (κ·Έλ¦¬κ³ JWTμμ ν΄λΌμ΄μΈνΈκ° μ¬μ©ν μ μλ ꡬλ μ νμΈν λ°©λ²μ΄ μμ)
μ μ¬μ μΌλ‘ μλ°± κ°μ λ§μ΄ν¬λ‘ GWκ° μλ κ²½μ° λκ΅°κ°κ° 401μ λ°λ μ΄μ λ₯Ό λλ²κΉ νλ κ²μ νΌλμ€λ¬μΈ κ²μ΄λΌκ³ μκ°ν©λλ€...ν ν½μ΄ λ±λ‘λμ§ μμμ΅λκΉ? μ΄λ₯Ό λ§λ€κΈ° μν΄ λ§μ΄ν¬λ‘ GWλ₯Ό λ€μ μμν΄μΌ ν©λκΉ? λ§μ΄ν¬λ‘-GW λͺ¨λ μ μμ μ κ°λ λ± μμ λ APIMκ° μλ΅νμ§ μλ κ²½μ° λ°μνλ λͺ¨λ μλΈ μ€ν¬λ¦½ λ©ν λ°μ΄ν° λ€μ΄λ‘λ cribedAPIμ : S λ° λ©ν λ°μ΄ν° JWT-λ©ν λ°μ΄ν°μ λΆμ°© λ μ루μ μ΄ ν¨μ¬ λ "κ°λ ₯ν"λ° μ μ Micro-GW:sλ JWTκ° λͺ¨λ μ 보λ₯Ό 보μ νκΈ° λλ¬Έμ APIMκ³Ό μλ¬΄λ° κ΄λ ¨μ΄ μμμ΅λλ€(κ·Έλ¦¬κ³ ν΄λΌμ΄μΈνΈλ ν€λ‘ μ‘μΈμ€ν μ μμλ ꡬλ μ΄ JWT λ©νλ°μ΄ν°μμ μ€μ€λ‘ νμΈν μ μμμ΅λλ€). λ°λΌμ λ΄κ° μνλ κ²μ Micro-GW:sμ ν¨κ» μ¬μ©ν μ΄μ λμ JWTλ₯Ό μμ±νλ λ°©λ²λΏμ λλ€. APIMμ μν΄ μΌλΆ JWT-Generator ν΄λμ€λ₯Ό νμ₯νμ¬ κ°λ₯ν κΉμ? (λλ μ΄ μλ‘μ΄ νΈλ€λ§μΌλ‘ μΈν΄ λ¬μ±νκΈ°κ° λ§€μ° μ΄λ ΅μ΅λκΉ?)