Authentification avec le serveur OAuth OpenShift

La fonction Social Login socialLogin-1.0 peut être configurée pour utiliser le serveur OAuth et le composant sidecar de proxy OAuth intégrés à Red Hat® OpenShift® en tant que fournisseurs d'authentification.

La fonctionnalité Social Login dispose de plusieurs fournisseurs préconfigurés (tels que Google, GitHub, ou Facebook), mais vous pouvez également configurer des fournisseurs supplémentaires (par exemple, Instagram, le serveur OAuth Red Hat OpenShift et le sidecar OAuth Proxy). Le premier est un flux de code d'autorisation OAuth standard, dans lequel un navigateur Web accédant à une application s'exécutant dans Liberty est redirigé vers le serveur OAuth Red Hat OpenShift pour s'authentifier. La seconde accepte un jeton entrant provenant du composant sidecar du proxy OAuth Red Hat OpenShift ou obtenu à partir d'un appel d'API Red Hat OpenShift . Cette approche nécessite moins de configuration propre au cluster.

Vous pouvez exécuter Liberty dans un pod, mais dans le flux de code d'autorisation, Liberty peut s'exécuter en dehors du cluster Red Hat OpenShift . Dans l'un ou l'autre de ces modes, un jeton JWT facultatif peut être créé pour la propagation vers les services en aval.

L'utilisation de Red Hat OpenShift en tant que fournisseur diffère légèrement des autres fournisseurs OAuth, car elle nécessite un jeton de compte de service pour obtenir des informations sur les jetons OAuth. Une fois que l'ID client, le secret et le jeton ont été obtenus auprès de Red Hat OpenShift, Liberty peut être configuré comme indiqué ici:

Pour activer la fonction, ajoutez-la au fichier server.xml.

Voir l'exemple de configuration de serveur suivant pour l'utilisation du serveur Red Hat OpenShift OAuth.

<server description="social">

  <!-- Enable features -->
  <featureManager>
    <feature>appSecurity-3.0</feature>
    <feature>socialLogin-1.0</feature>
  </featureManager>

<logging traceSpecification="com.ibm.ws.security.*=all=enabled" maxFiles="8" maxFileSize="200"/>

<httpEndpoint  id="defaultHttpEndpoint" host="*" httpPort="8941" httpsPort="8946" > <tcpOptions soReuseAddr="true" /> </httpEndpoint>


  <!-- specify your clientId, clientSecret and userApiToken as liberty variables or environment variables -->
  <oauth2Login id="openshiftLogin"
    scope="user:full"
    clientId="${myclientId}"
    clientSecret="${myclientSecret}"
    authorizationEndpoint="https://oauth-openshift.apps.papains.os.example.com/oauth/authorize"
    tokenEndpoint="https://oauth-openshift.apps.papains.os.example.com/oauth/token"
    userNameAttribute="username"
    groupNameAttribute="groups"
    userApiToken="${serviceAccountToken}"
    userApiType="kube"
    userApi="https://api.papains.os.example.com:6443/apis/authentication.k8s.io/v1/tokenreviews">
  </oauth2Login>

  <keyStore id="defaultKeyStore" password="keyspass" />

  <!-- more application config would go here -->

</server>

Dans le scénario incluant le composant sidecar, la configuration est modifiée pour accepter un jeton entrant émis par le composant sidecar. Voir l'exemple de configuration de serveur suivant pour l'utilisation du composant sidecar de proxy OAuth:

<!-- specify your userApiToken as a liberty variable or environment variable -->
  <!-- note that no clientId or clientSecret are needed -->
  <oauth2Login id="openshiftLogin"
    scope="user:full"
    userNameAttribute="username"
    groupNameAttribute="groups"
    userApiToken="${serviceAccountToken}"
    userApiType="kube"
    accessTokenHeaderName="X-Forwarded-Access-Token"
    accessTokenRequired="true"
    userApi="https://kubernetes.default.svc/apis/authentication.k8s.io/v1/tokenreviews">
  </oauth2Login>

Pour utiliser la communication HTTPS, le serveur doit posséder une clé signée par une autorité de certification bien connue, que Liberty peut approuver automatiquement, ou la clé publique du serveur doit être ajoutée au magasin de clés de confiance Liberty. Red Hat OpenShift ne fournissant pas de clés signées par l'autorité de certification par défaut, la clé publique du serveur Red Hat OpenShift OAuth doit être ajoutée. Pour ajouter la clé publique, vous pouvez spécifier une variable d'environnement dans le fichier server.env. Ce paramètre identifie le fichier contenant la clé publique au format PEM. Liberty lit le fichier et ajoute la clé à son magasin de clés de confiance.

# server.env

# OAuth sidecar scenario: causes the Kubernetes default certificate that is pre-installed in pods to be added to Liberty trust store.
cert_defaultKeyStore=/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

# OAuth server scenario: causes the public keys from /tmp/trustedcert.pem (obtained separately) to be added to Liberty trust store.
cert_defaultKeyStore=/tmp/trustedcert.pem