Product-apim: Validasi Berlangganan Dalam Memori

Dibuat pada 3 Jun 2020  ·  11Komentar  ·  Sumber: wso2/product-apim

Jelaskan masalah Anda

Untuk validasi langganan, gateway memanggil layanan validasi kunci yang berjalan di node manajer kunci, dan manajer kunci mengakses database untuk mengambil data yang diperlukan untuk validasi.

jika terjadi kegagalan database, ada kemungkinan permintaan gagal saat runtime.

Jelaskan solusi Anda

memuat informasi yang diperlukan untuk validasi langganan ke memori saat server mulai dan saat memuat penyewa untuk penyewa.
Untuk setiap pembaruan seperti pembuatan aplikasi, menambahkan langganan, akan diberitahukan melalui acara ke pengelola Lalu Lintas.
Gateway akan berlangganan acara ini melalui topik.

Bagaimana Anda akan menerapkannya?


PrioritNormal TypNew Feature

Komentar yang paling membantu

Persyaratan bagi kami adalah menggunakan Micro-Gateway bersama APIM. Pengguna menghasilkan JWT di APIM dan menggunakannya untuk mendapatkan akses ke masing-masing Micro-GW:s. Sebelumnya semua API yang dilanggan ada di metadata JWT dan dapat diverifikasi "offline" oleh Micro-GW. Penyiapan baru ini mengharuskan semua instans Micro-GW kami untuk mendengarkan langganan JMS agar tetap up to date? (dan tidak ada cara untuk memverifikasi di JWT langganan mana yang tersedia untuk klien)

Saya hanya berpikir bahwa dengan potensi ratusan micro-GW:s, akan sulit untuk men-debug mengapa seseorang mendapatkan 401...apakah Topik tidak terdaftar, apakah kita perlu memulai ulang Micro-GW untuk membuatnya unduh semua metadata-langganan, apa yang terjadi jika APIM tidak merespons ketika Micro-GW mulai, dll. Memiliki semua subscribedAPI:s dan metadata yang dilampirkan dalam metadata-JWT membuat solusi jauh lebih "kuat" dan Micro-GW:s tidak memiliki ikatan apa pun dengan APIM karena JWT menyimpan semua informasi (dan klien sendiri dapat memeriksa di JWT-metadata langganan mana yang mereka akses dengan kunci). Jadi yang saya inginkan hanyalah cara untuk menghasilkan JWT perilaku lama untuk digunakan dengan Micro-GW:s kami. Mungkin itu mungkin dengan memperluas beberapa kelas JWT-Generator untuk APIM? (Atau akankah penanganan baru ini membuatnya sangat sulit untuk dicapai?)

Semua 11 komentar

@isharac

memuat informasi yang diperlukan untuk validasi langganan ke memori saat server mulai dan saat memuat penyewa untuk penyewa.

Di PR wso2/carbon-apimgt#8563 layanan tidak diamankan saat ini. Bagaimana layanan ini akan diamankan? Otentikasi dasar atau OAuth?

@isharac @chamilaadhi
Juga dengan perubahan ini, atribut apa yang hilang dari JWT di bawah dan muatan respons validasi kunci.


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"
}


Tanggapan validasi kunci

<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

memuat informasi yang diperlukan untuk validasi langganan ke memori saat server mulai dan saat memuat penyewa untuk penyewa.

Dalam PR wso2/carbon-apimgt#8563 layanan tidak diamankan saat ini. Bagaimana layanan ini akan diamankan? Otentikasi dasar atau OAuth?

Ini dijamin dengan otentikasi dasar.

@praminda kami hanya akan memiliki klaim JWT standar dalam JWT yang berasal dari penyedia Oauth setelah perubahan ini

Baik. Jadi kita akan kehilangan atribut di bawah ini dari JWT,

"application": {},
"tierInfo": {},
"keytype": "",
"subscribedAPIs": [],

dan hanya atribut berikut yang akan tersedia dalam respons validasi kunci. Apakah saya benar?

<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>

Ini diimplementasikan.

Adakah pertimbangan untuk mengizinkan pengguna mengonfigurasi perilaku ini atau tidak? Lebih suka bisa mendapatkan semua info di JWT daripada mengandalkan langganan JMS untuk tetap up-to-date. Atau setidaknya cara untuk menghasilkan JWT dengan semua langganan dari database? (Khususnya bila digunakan bersama dengan micro-gw).

Hai @christian-morin
Kami tidak memiliki rencana untuk membuatnya dapat dikonfigurasi karena ini adalah perilaku default sekarang.
Dan manajer kunci pihak ketiga tidak mengetahui metadata langganan (karena DB tidak dibagikan), JWT yang dihasilkan dari KM pihak ketiga tidak dapat disertakan dalam data langganan.

Jika Anda dapat membagikan kebutuhan spesifik Anda, mungkin kami dapat memberikan solusi.

Persyaratan bagi kami adalah menggunakan Micro-Gateway bersama APIM. Pengguna menghasilkan JWT di APIM dan menggunakannya untuk mendapatkan akses ke masing-masing Micro-GW:s. Sebelumnya semua API yang dilanggan ada di metadata JWT dan dapat diverifikasi "offline" oleh Micro-GW. Penyiapan baru ini mengharuskan semua instans Micro-GW kami untuk mendengarkan langganan JMS agar tetap up to date? (dan tidak ada cara untuk memverifikasi di JWT langganan mana yang tersedia untuk klien)

Saya hanya berpikir bahwa dengan potensi ratusan micro-GW:s, akan sulit untuk men-debug mengapa seseorang mendapatkan 401...apakah Topik tidak terdaftar, apakah kita perlu memulai ulang Micro-GW untuk membuatnya unduh semua metadata-langganan, apa yang terjadi jika APIM tidak merespons ketika Micro-GW mulai, dll. Memiliki semua subscribedAPI:s dan metadata yang dilampirkan dalam metadata-JWT membuat solusi jauh lebih "kuat" dan Micro-GW:s tidak memiliki ikatan apa pun dengan APIM karena JWT menyimpan semua informasi (dan klien sendiri dapat memeriksa di JWT-metadata langganan mana yang mereka akses dengan kunci). Jadi yang saya inginkan hanyalah cara untuk menghasilkan JWT perilaku lama untuk digunakan dengan Micro-GW:s kami. Mungkin itu mungkin dengan memperluas beberapa kelas JWT-Generator untuk APIM? (Atau akankah penanganan baru ini membuatnya sangat sulit untuk dicapai?)

Hai @christian-morin
Untuk mendukung usecase Anda, kami dapat memberikan 2 opsi.

Pilihan 1:
Gunakan APIM 3.1.0 dengan MG 3.2.0

Pilihan 2:
Gunakan API-M 3.2.0 dan sesuaikan TokenIssuer seperti yang dijelaskan di [1].
Dalam hal ini, Anda perlu membagikan db APIM dengan node Key Manager dan akan dapat menambahkan klaim yang diperlukan di JWT.

Semoga ini membantu!
[1] https://is.docs.wso2.com/en/latest/learn/extension-points-for-oauth/#oauth -token-generator

Hai @isharac

Terima kasih atas balasannya. Saya berasumsi Opsi 1 bukan solusi jangka panjang yang sangat baik karena kami tidak akan pernah dapat memutakhirkan produk? ;)

Saya menduga kami harus menulis TokenIssuer yang disesuaikan seperti yang Anda sarankan, tetapi senang mengetahui itu mungkin. Terima kasih.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat