Product-apim: λ©”λͺ¨λ¦¬ ꡬ독 확인

에 λ§Œλ“  2020λ…„ 06μ›” 03일  Β·  11μ½”λ©˜νŠΈ  Β·  좜처: wso2/product-apim

문제 μ„€λͺ…

ꡬ독 κ²€μ¦μ˜ 경우 κ²Œμ΄νŠΈμ›¨μ΄λŠ” ν‚€ κ΄€λ¦¬μž λ…Έλ“œμ—μ„œ μ‹€ν–‰ 쀑인 ν‚€ 검증 μ„œλΉ„μŠ€λ₯Ό ν˜ΈμΆœν•˜κ³  ν‚€ κ΄€λ¦¬μžλŠ” λ°μ΄ν„°λ² μ΄μŠ€μ— μ•‘μ„ΈμŠ€ν•˜μ—¬ 검증에 ν•„μš”ν•œ 데이터λ₯Ό κ²€μƒ‰ν•©λ‹ˆλ‹€.

λ°μ΄ν„°λ² μ΄μŠ€ 였λ₯˜μ˜ 경우 λŸ°νƒ€μž„μ— μš”μ²­μ΄ μ‹€νŒ¨ν•  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

μ†”λ£¨μ…˜ μ„€λͺ…

μ„œλ²„ μ‹œμž‘ μ‹œ 및 ν…Œλ„ŒνŠΈμ— λŒ€ν•œ ν…Œλ„ŒνŠΈ λ‘œλ“œ μ‹œ λ©”λͺ¨λ¦¬μ— λŒ€ν•œ ꡬ독 μœ νš¨μ„± 검사에 ν•„μš”ν•œ λ‘œλ“œ 정보.
μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 생성과 같은 μ—…λ°μ΄νŠΈμ˜ 경우 ꡬ독을 μΆ”κ°€ν•˜λ©΄ 이벀트λ₯Ό 톡해 νŠΈλž˜ν”½ κ΄€λ¦¬μžμ— μ•Œλ¦Όμ΄ μ „μ†‘λ©λ‹ˆλ‹€.
κ²Œμ΄νŠΈμ›¨μ΄λŠ” 주제λ₯Ό 톡해 이 이벀트λ₯Ό κ΅¬λ…ν•©λ‹ˆλ‹€.

μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  것인가


PrioritNormal TypNew Feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

우리의 μš”κ΅¬ 사항은 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 클래슀λ₯Ό ν™•μž₯ν•˜μ—¬ κ°€λŠ₯ν• κΉŒμš”? (λ˜λŠ” 이 μƒˆλ‘œμš΄ ν•Έλ“€λ§μœΌλ‘œ 인해 λ‹¬μ„±ν•˜κΈ°κ°€ 맀우 μ–΄λ ΅μŠ΅λ‹ˆκΉŒ?)

λͺ¨λ“  11 λŒ“κΈ€

@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λ₯Ό μž‘μ„±ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν–ˆμ§€λ§Œ 그것이 κ°€λŠ₯ν•΄μ•Ό ν•œλ‹€λŠ” 사싀을 μ•Œκ²Œ λ˜μ–΄ κΈ°μ©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰