jwt-auth eklentisi, JSON Web Token (JWT) tabanlı istek kimlik doğrulama ve yetkilendirme işlemlerini gerçekleştirir. URL parametrelerinden, istek başlıklarından veya çerezlerden JWT ayrıştırır ve erişim izni vermek veya reddetmek için belirteci doğrular. JWT ile kimlik doğrulama ve yetkilendirme çözümünden farklı olarak bu eklenti, çağrı yapanları da tanımlayarak her biri için ayrı JWT kimlik bilgileri yapılandırmanıza olanak tanır.
Yapılandırma alanları
Kimlik doğrulama yapılandırması
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Aşağıdaki tabloda, consumers içindeki her bir öğenin alanları açıklanmaktadır.
|
Ad |
Veri türü |
Zorunluluk |
Varsayılan değer |
Açıklama |
|
name |
string |
Zorunlu |
- |
Tüketici adı. |
|
jwks |
string |
İsteğe bağlı. |
- |
JSON Web Key (JWK) standardında belirtilen JSON Web Key Set (JWKS) dizesi. JWT imzasını doğrulamak için kullanılan genel anahtarı veya simetrik anahtarı içerir. |
|
remote_jwks |
object |
İsteğe bağlı. |
{"uri":"http://127.0.0.1/keys","service":"test.static","port":"80","ttl":30000,"timeout":3000} |
Belirtilen hizmet URI'sinden JWKS'i periyodik olarak çeker. Hem Not
|
|
issuer |
string |
İsteğe bağlı |
- |
JWT yayıncısı. Payload'daki |
|
claims |
object |
İsteğe bağlı |
- |
Payload'daki anahtar-değer çiftleriyle eşleşen ve birden fazla alanın payload ile uyumlu olduğunu doğrulamak için kullanılan anahtar-değer çiftleri. Örneğin, |
|
claims_to_headers |
object dizisi |
İsteğe bağlı |
- |
Belirtilen JWT payload alanlarını çıkarır ve arka uca iletmeden önce bunları istek başlığı olarak ayarlar. |
|
from_headers |
object dizisi |
İsteğe bağlı |
[{"name":"Authorization","value_prefix":"Bearer"}] |
JWT'yi belirtilen istek başlıklarından çıkarır. |
|
from_params |
dize dizisi |
İsteğe bağlı |
access_token |
JWT'yi belirtilen URL parametrelerinden çıkarır. |
|
from_cookies |
dize dizisi |
İsteğe bağlı |
- |
JWT'yi belirtilen çerezlerden çıkarır. |
|
clock_skew_seconds |
number |
İsteğe bağlı |
60 |
JWT'nin |
|
keep_token |
bool |
İsteğe bağlı |
true |
İstek arka uca iletilirken JWT'nin korunup korunmayacağını belirtir. |
Varsayılan değerler yalnızca from_headers, from_params ve from_cookies yapılandırılmadığında kullanılır.
-
Aşağıdaki tabloda,
from_headersiçindeki her bir öğenin alanları açıklanmaktadır.
Ad
Veri türü
Zorunluluk
Varsayılan değer
Açıklama
name
string
Zorunlu
-
JWT'nin çıkarıldığı istek başlığı.
value_prefix
string
Zorunlu
-
Başlık değerinden kaldırılacak ön ek. Kalan kısım JWT olarak kabul edilir. -
Aşağıdaki tabloda,
claims_to_headersiçindeki her bir öğenin alanları açıklanmaktadır.Ad
Veri türü
Zorunluluk
Varsayılan değer
Açıklama
claim
string
Zorunlu
-
JWT payload'unda belirtilen bir alan. Değer dize veya işaretsiz tam sayı olmalıdır.
header
string
Zorunlu
-
Çıkarılan claim değerinin atanacağı ve arka uca iletileceği istek başlığı.
override
bool
İsteğe bağlı
true
-
true ise aynı ada sahip istek başlığının üzerine yazar.
-
false ise değeri yinelenen bir istek başlığı olarak ekler.
-
-
Aşağıdaki tabloda,
remote_jwksiçindeki her bir öğenin alanları açıklanmaktadır.Ad
Veri türü
Zorunluluk
Varsayılan değer
Açıklama
uri
string
Zorunlu
-
İstek URL'si.
service
string
Zorunlu
-
-
Kubernetes hizmeti örneği: foo.default.svc.cluster.local.
-
Nacos hizmeti örneği: foo.DEFAULT-GROUP.public.nacos.
-
test adlı DNS hizmeti için test.dns girin.
-
test adlı statik IP hizmeti için test.static girin.
port
bool
Zorunlu
-
Hizmet bağlantı noktası.
timeout
bool
İsteğe bağlı
3000
Milisaniye cinsinden hizmet isteği zaman aşımı.
ttl
bool
İsteğe bağlı
30000
Milisaniye cinsinden önbellek süresi.
-
Yetkilendirme yapılandırması (isteğe bağlı)
|
|
|
|
|
|
|
|
|
|
|
|
Yetkilendirme ve kimlik doğrulama yapılandırmaları aynı kuralda birlikte kullanılamaz.
Kimlik doğrulama ve yetkilendirmeden geçen isteklere, çağrı yapanın adını tanımlamak için bir
X-Mse-Consumerbaşlığı eklenir.
Yapılandırma örnekleri
Genel kimlik doğrulama ve rota düzeyinde yetkilendirme yapılandırma
Bu örnekte, örnek düzeyinde genel JWT kimlik doğrulaması etkinleştirilir ve rota düzeyindeki erişim belirli tüketicilerle sınırlandırılır.
Bir JWT birden fazla JWKS ile eşleşebiliyorsa yapılandırma sırasındaki ilk eşleşen tüketici kullanılır.
Eklenti yapılandırması
Eklentiyi örnek düzeyinde aşağıdaki gibi yapılandırın:
consumers:
- name: consumer1
issuer: abcd
jwks: |
{
"keys": [
{
"kty": "oct",
"kid": "123",
"k": "hM0k3AbXBPpKOGg__Ql2Obcq7s60myWDpbHXzgKUQdYo7YCRp0gUqkCnbGSvZ2rGEl4YFkKqIqW7mTHdj-bcqXpNr-NOznEyMpVPOIlqG_NWVC3dydBgcsIZIdD-MR2AQceEaxriPA_VmiUCwfwL2Bhs6_i7eolXoY11EapLQtutz0BV6ZxQQ4dYUmct--7PLNb4BWJyQeWu0QfbIthnvhYllyl2dgeLTEJT58wzFz5HeNMNz8ohY5K0XaKAe5cepryqoXLhA-V-O1OjSG8lCNdKS09OY6O0fkyweKEtuDfien5tHHSsHXoAxYEHPFcSRL4bFPLZ0orTt1_4zpyfew",
"alg": "HS256"
}
]
}
- name: consumer2
issuer: abc
jwks: |
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"kid": "123",
"alg": "RS256",
"n": "i0B67f1jggT9QJlZ_8QL9QQ56LfurrqDhpuu8BxtVcfxrYmaXaCtqTn7OfCuca7cGHdrJIjq99rz890NmYFZuvhaZ-LMt2iyiSb9LZJAeJmHf7ecguXS_-4x3hvbsrgUDi9tlg7xxbqGYcrco3anmalAFxsbswtu2PAXLtTnUo6aYwZsWA6ksq4FL3-anPNL5oZUgIp3HGyhhLTLdlQcC83jzxbguOim-0OEz-N4fniTYRivK7MlibHKrJfO3xa_6whBS07HW4Ydc37ZN3Rx9Ov3ZyV0idFblU519nUdqp_inXj1eEpynlxH60Ys_aTU2POGZh_25KXGdF_ZC_MSRw"
}
]
}
Rota ve etki alanı adı yapılandırması
route-a ve route-b rotaları için eklentiyi aşağıdaki gibi yapılandırın:
allow:
- consumer1
*.example.com ve test.com etki alanı adları için eklentiyi aşağıdaki gibi yapılandırın:
allow:
- consumer2
Bu örnekte
route-averoute-bağ geçidi rotalarını oluştururken girdiğiniz rota adlarıdır. İstek bu rotalarla eşleştiğinde adıconsumer1olan çağrı yapanlara erişim izni verilir. Diğer çağrı yapanların erişimi reddedilir.Bu örnekte
*.example.comvetest.comisteklerin etki alanı adıyla eşleştirilmesi için kullanılır. Etki alanı adı eşleştiğinde adıconsumer2olan çağrı yapanlara erişim izni verilir. Diğer çağrı yapanların erişimi reddedilir.
İstek örnekleri
Aşağıdaki istekler bu yapılandırma altında izin verilir. Bu örneklerde isteklerin route-a rotasıyla eşleştiği varsayılmaktadır.
-
JWT'yi URL parametresinde ayarlayın.
curl 'http://xxx.hello.com/test?access_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEy****.eyJpc3MiOiJhYmNkIiwic3ViIjoidGVzdCIsImlhdCI6MTY2NTY2MDUyNywiZXhwIjoxODY1NjczODE5fQ.-vBSV0bKeDwQcuS6eeSZN9dLTUnSnZVk8eVCXdooCQ4' -
JWT'yi HTTP istek başlığında ayarlayın.
curl http://xxx.hello.com/test -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjEyMyJ9.eyJpc3MiOiJhYmNkIiwic3ViIjoidGVzdCIsImlhdCI6MTY2NTY2MDUyNywiZXhwIjoxODY1NjczODE5fQ.-vBSV0bKeDwQcuS6eeSZN9dLTUnSnZVk8eVCXdooCQ4'
Sonucu doğrulama
Kimlik doğrulama başarılı olduktan sonra çağrı yapanın adını içeren X-Mse-Consumer başlığı isteğe eklenir. Bu örnekte değeri consumer1 olur.
Aşağıdaki istekler reddedilir.
İstek JWT sağlamadığından 401 hatası döndürülür.
Sağlanan JWT tarafından eşleştirilen çağrı yapanın erişim izni olmadığından 403 hatası döndürülür.
Ağ geçidi örnek düzeyinde etkinleştirme ancak belirli bir rota için devre dışı bırakma
Eklentiyi örnek düzeyinde aşağıdaki gibi yapılandırın:
global_auth: true
consumers:
- name: consumer1
issuer: abcd
jwks: |
{
"keys": [
{
"kty": "oct",
"kid": "123",
"k": "hM0k3AbXBPpKOGg__Ql2Obcq7s60myWDpbHXzgKUQdYo7YCRp0gUqkCnbGSvZ2rGEl4YFkKqIqW7mTHdj-bcqXpNr-NOznEyMpVPOIlqG_NWVC3dydBgcsIZIdD-MR2AQceEaxriPA_VmiUCwfwL2Bhs6_i7eolXoY11EapLQtutz0BV6ZxQQ4dYUmct--7PLNb4BWJyQeWu0QfbIthnvhYllyl2dgeLTEJT58wzFz5HeNMNz8ohY5K0XaKAe5cepryqoXLhA-V-O1OjSG8lCNdKS09OY6O0fkyweKEtuDfien5tHHSsHXoAxYEHPFcSRL4bFPLZ0orTt1_4zpyfew",
"alg": "HS256"
}
]
}
- name: consumer2
issuer: abc
jwks: |
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"kid": "123",
"alg": "RS256",
"n": "i0B67f1jggT9QJlZ_8QL9QQ56LfurrqDhpuu8BxtVcfxrYmaXaCtqTn7OfCuca7cGHdrJIjq99rz890NmYFZuvhaZ-LMt2iyiSb9LZJAeJmHf7ecguXS_-4x3hvbsrgUDi9tlg7xxbqGYcrco3anmalAFxsbswtu2PAXLtTnUo6aYwZsWA6ksq4FL3-anPNL5oZUgIp3HGyhhLTLdlQcC83jzxbguOim-0OEz-N4fniTYRivK7MlibHKrJfO3xa_6whBS07HW4Ydc37ZN3Rx9Ov3ZyV0idFblU519nUdqp_inXj1eEpynlxH60Ys_aTU2POGZh_25KXGdF_ZC_MSRw"
}
]
}
route-b rotası için eklentiyi aşağıdaki gibi yapılandırın:
_disable_: true
Bu örnekte route-b ağ geçidi rotasını oluştururken girdiğiniz rota adıdır. _disable_ değeri true olarak ayarlandığından istek bu rota ile eşleştiğinde eklenti devre dışı bırakılır. JWT kimlik doğrulaması gerçekleştirilmez ve tüm kullanıcıların erişimine izin verilir.
route-b rotasıyla eşleşmeyen istekler için örnek düzeyinde global_auth değeri true olarak ayarlandığından JWT kimlik doğrulaması gerçekleştirilir. Hem consumer1 hem de consumer2 tüketicilerine erişim izni verilir.
Etki alanı adı düzeyinde etkinleştirme ancak belirli bir rota için devre dışı bırakma
Eklentiyi örnek düzeyinde aşağıdaki gibi yapılandırın:
consumers:
- name: consumer1
issuer: abcd
jwks: |
{
"keys": [
{
"kty": "oct",
"kid": "123",
"k": "hM0k3AbXBPpKOGg__Ql2Obcq7s60myWDpbHXzgKUQdYo7YCRp0gUqkCnbGSvZ2rGEl4YFkKqIqW7mTHdj-bcqXpNr-NOznEyMpVPOIlqG_NWVC3dydBgcsIZIdD-MR2AQceEaxriPA_VmiUCwfwL2Bhs6_i7eolXoY11EapLQtutz0BV6ZxQQ4dYUmct--7PLNb4BWJyQeWu0QfbIthnvhYllyl2dgeLTEJT58wzFz5HeNMNz8ohY5K0XaKAe5cepryqoXLhA-V-O1OjSG8lCNdKS09OY6O0fkyweKEtuDfien5tHHSsHXoAxYEHPFcSRL4bFPLZ0orTt1_4zpyfew",
"alg": "HS256"
}
]
}
- name: consumer2
issuer: abc
jwks: |
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"kid": "123",
"alg": "RS256",
"n": "i0B67f1jggT9QJlZ_8QL9QQ56LfurrqDhpuu8BxtVcfxrYmaXaCtqTn7OfCuca7cGHdrJIjq99rz890NmYFZuvhaZ-LMt2iyiSb9LZJAeJmHf7ecguXS_-4x3hvbsrgUDi9tlg7xxbqGYcrco3anmalAFxsbswtu2PAXLtTnUo6aYwZsWA6ksq4FL3-anPNL5oZUgIp3HGyhhLTLdlQcC83jzxbguOim-0OEz-N4fniTYRivK7MlibHKrJfO3xa_6whBS07HW4Ydc37ZN3Rx9Ov3ZyV0idFblU519nUdqp_inXj1eEpynlxH60Ys_aTU2POGZh_25KXGdF_ZC_MSRw"
}
]
}
route-b rotası için eklentiyi aşağıdaki gibi yapılandırın:
_disable_: true
*.example.com etki alanı adı için eklentiyi aşağıdaki gibi yapılandırın:
allow:
- consumer1
- consumer2
Bu örnekte route-b ağ geçidi rotasını oluştururken girdiğiniz rota adıdır. _disable_ değeri true olarak ayarlandığından istek bu rota ile eşleştiğinde eklenti devre dışı bırakılır. JWT kimlik doğrulaması gerçekleştirilmez ve tüm kullanıcıların erişimine izin verilir.
Bu örnekte *.example.com isteklerin etki alanı adıyla eşleştirilmesi için kullanılır. Etki alanı adı eşleştiğinde adı consumer1 veya consumer2 olan çağrı yapanlara erişim izni verilir. Diğer çağrı yapanların erişimi reddedilir.
Kurallar sırayla eşleştirilir: İlk eşleşme uygulanır ve diğer kurallar değerlendirilmez. Rota kuralları etki alanı adı kurallarına göre önceliklidir, bu nedenle bir etki alanı adı için eklentiyi etkinleştirip o etki alanı altındaki belirli bir rota için devre dışı bırakabilirsiniz.
İlgili hata kodları
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|