Нужна помощь с пользовательской аутентификацией в Istio / kubernates - PullRequest
1 голос
/ 03 мая 2020

Я новичок в Istio, и я многому научился и применил свой проект, который состоит из множества микросервисов. Я застрял в аутентификации, когда дело доходит до использования Istio

Так что проблема заключается в следующем. Istio предлагает аутентификацию, которая включает использование Oauth Google, Oauth или любого другого провайдера. и как только мы сделаем это, мы можем настроить AuthPolicy и определить, к каким микросервисам мы хотим, чтобы он применялся. Я приложил свою политику аутентификации yaml, и она отлично работает. Теперь, возможно, проект на Job требует, чтобы я также использовал собственную аутентификацию. Другими словами, у меня есть один микросервис, который обрабатывает аутентификацию. Этот микросервис аутентификации имеет три конечные точки: / login, / singup, / logout и / auth. Обычно в моем приложении я вызываю / auth в качестве промежуточного программного обеспечения, прежде чем сделать какой-либо другой вызов, чтобы убедиться, что пользователь вошел в систему. / Auth в моей микросервисе читает токен jwt, который я сохранил в cook ie при входе в систему на первом месте и проверьте, если он действителен. Теперь мой вопрос заключается в том, как добавить мою пользовательскую аутентификацию, а не использовать Oauth ?. Теперь, как вы знаете, auth policy.yaml, который я подключил, вызовет проверку подлинности на уровне прокси-сервера sidecar; поэтому мне не нужно направлять мой трафик c на входной шлюз; это означает, что мой шлюз заботится о MTL, в то время как Sidecar заботится о проверке подлинности JWT. Итак, как подключить мой пользовательский аутентификатор в policy.yaml или другим способом, так что «мне не нужно перенаправлять все мои traffi c на входной шлюз».

Короче, пожалуйста, помогите мне с тем, как добавить мою собственную аутентификацию jwt check-in policy.yaml, как на картинке или любым другим способом, и при необходимости измените также мой код авторизации [micro-service] [1]. Люди предлагают перенаправить трафик c на входной шлюз и добавить туда код фильтра посланника, который перенаправит трафик c на аутентифицированные микросервисы. Но мне не нужно перенаправлять все мои вызовы на входной шлюз и запускать там фильтр посланников. Я хочу добиться того, что istio уже делает, путем определения политики, проверка yaml и проверки подлинности jwt происходит на уровне прокси-сервера sidecar в соответствии с policy.yaml; поэтому мы не перенаправляем трафик c на входной шлюз.

Np: все мои микросервисы находятся в ClusterIP, и только мой внешний интерфейс открыт снаружи. Жду вашей помощи / совета

Вот мой код для политики 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

вот мой код для микросервиса авторизации, чтобы показать вам мой текущий журнал проверки 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})
...