Je suis nouveau sur Istio et j'ai beaucoup appris et appliqué à mon projet qui consiste en plusieurs Microservices. Je suis bloqué au niveau de l'authentification lorsqu'il s'agit d'utiliser Istio.
Le problème est donc le suivant. Istio offre une authentification qui implique l'utilisation de Oauth google, Oauth ou tout autre fournisseur. et Une fois que nous faisons cela, nous pouvons configurer AuthPolicy et définir quels microservices nous voulons qu'il s'applique. J'ai joint ma politique d'authentification yaml et elle fonctionne bien. Maintenant, mon projet au travail me demande d'utiliser une authentification personnalisée. En d'autres termes, j'ai un microservice qui gère l'authentification. Ce microservice d'authentification a trois points de terminaison : /login, /singup, /logout et /auth. Normalement, dans mon application, j'appelle /auth en tant que middleware avant de faire tout autre appel pour m'assurer que l'utilisateur est connecté. /auth dans mon microservice lit le jeton jwt que j'ai stocké dans un cookie lorsque je me suis connecté en premier lieu et vérifie s'il est valide. Maintenant ma question est de savoir comment ajouter mon authentification personnalisée plutôt que d'utiliser Oauth ? Comme vous le savez, la politique d'authentification.yaml que j'ai jointe déclenchera la vérification de l'authentification au niveau du proxy de la sidecar ; je n'ai donc pas besoin de diriger mon trafic vers la passerelle d'entrée ; cela signifie que ma passerelle s'occupe des mtls tandis que la sidecar se charge de la vérification de l'authentification jwt. Alors comment insérer mon authentification personnalisée dans policy.yaml ou d'une autre manière de sorte que "je n'ai pas besoin de rediriger tout mon trafic vers la passerelle ingress".
En bref, veuillez m'aider à ajouter mon auth jwt check-in policy.yaml personnalisé comme dans l'image ou de toute autre manière et si nécessaire modifier mon code auth [micro-service][1] aussi. Les gens suggèrent de rediriger le trafic vers la passerelle ingress et d'y ajouter le code du filtre envoy qui redirigera le trafic vers les microservices auth. Mais je n'ai pas besoin de rediriger tous mes appels vers la passerelle ingress et d'y exécuter le filtre envoy. Je veux réaliser ce qu'istio fait déjà en définissant la politique yaml et la vérification d'authentification jwt se fait au niveau du proxy sidecar en suivant la politique.yaml ; ainsi nous ne redirigeons pas le trafic vers la passerelle ingress.
Np : tous mes microservices sont dans ClusterIP et seul mon front-end est exposé à l'extérieur. Dans l'attente de votre aide/conseil
Voici mon code pour auth policy.yaml
apiVersion: "authentication.istio.io/v1alpha1"
kind: "Policy"
metadata:
name: reshub
spec:
targets:
- name: hotelservice // auth check when ever call is made to this microservice
peers:
- mtls: {}
origins:
- jwt:
issuer: "https://rshub.auth0.com/"
jwksUri: "https://rshub.auth0.com/.well-known/jwks.json"
principalBinding: USE_ORIGIN
voici mon code pour le microservice d'authentification, juste pour vous montrer mon journal actuel de vérification de jwt
@app.route('/auth/varifyLoggedInUser',methods=['POST'])
def varifyLoggedInUser():
isAuthenticated = False
users = mongo.db.users
c = request.cookies.get('token')
token = request.get_json()['cookie']
print(token)
if token:
decoded_token = decode_token(token)
user_identity =decoded_token['identity']['email']
user = users.find_one({'email': user_identity,'token':token})
if user:
isAuthenticated = True
return jsonify({'isAuthenticated' : isAuthenticated,'token':c})