Configurer auth-openid-connect/OAuth2 avec Nextcloud?

Bonjour,

Finalement il semble possible d’utiliser Nextcloud (Nextcloud AIO 10 sous docker) pour authentifier les utilisateurs d’une instance PeerTube (sous docker aussi), avec le plugin :

Nextcloud OIDC Identity Provider

Et le plugin officiel de PeerTube : auth-openid-connect

Les redirections entre Nextcloud et PeerTube fonctionnent bien, mais j’ai le message suivant quand j’essaie de me connecter (affiché sur la console au retour de Nextcloud) :

peertube_1  | [<mon_adresse_peertube>:443] 2024-12-18 13:19:50.427 error: Client log: Backend returned code 400, errorMessage is: Invalid grant: user credentials are invalid {
peertube_1  |   "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
peertube_1  |   "url": "https://<mon_adresse_peertube>/login?externalAuthToken=4903291b9f153a7e9e5cfdaf8175677170c3afc79c706835c4a953005390b92a&username=<mon_login>"
peertube_1  | }

Et il est écrit sur la page PeerTube : « Incorrect username or password », mais le username de l’url de retour est bien le bon et correspond bien à un utilisateur de PeerTube valide ! (donc PeerTube reçoit bien un token et un nom d’utilisateur valide, mais dit qu’il n’est pas correct … Bug dans PeerTube ou dans le plugin officiel ?)

Car si je me connecte sur Nextcloud dans un nouvel onglet, il ne me demande pas de mot de passe et ouvre bien la page du compte.

Je précise qu’il existe bien un compte avec le même login dans les 2 instances, et que cela fait pareil si j’utilise un compte qui n’existe que dans Nextcloud.

Tout semble bien fonctionner car si je renseigne le champ roles par exemple, j’obtiens le code d’erreur :

[<..>:443 peertube-plugin-auth-openid-connect] 2024-12-18 13:51:02.655 error: Cannot load role undefined from OpenID: not a number.

Et j’ai aussi cette ligne dans les logs (bien qu’il affiche l’adresse email et pas le login ?!

peertube_1  | [<srv>:443] 2024-12-18 18:32:31.065 info: Auth success with external auth method openid-connect of plugin peertube-plugin-auth-openid-connect for <l_email_de_l_utilisateur>.

Voilà mes paramètres :
Discover URL = https://<adresse_du_nextcloud>/.well-known/openid-configuration
Scope = openid email profile
Username property = sub (ou prefered_username)
Group property = groups (ou vide)
Allowed group = (vide)
Token signature algorithm = RS256

Je n’ai pas de groupe dans le Nextcloud, mais cela ne fonctionne pas mieux avec (en ajoutant « groups » dans « scope » sinon => « Cannot read properties of undefined (reading ‹ includes ›) »)

J’ai essayé avec 3 navigateurs au cas où :upside_down_face:

Une idée, quelqu’un à déjà réussi cela ?

1 « J'aime »

En testant différentes valeurs (ici mettre comme email = ‹ sub ›) avec les log=debug, je me suis aperçu que le champ ‹ username › (retourné par openid-connect ?) était égal au < login > Nextcloud si celui-ci n’existait PAS dans PeerTube, mais était égal à « < login >-1 » si l’utilisateur existait dans PeerTube … : Je me dit que du coup dans les deux cas cela ne peut fonctionner, car soit username n’est pas créé, soit sa valeur n’est pas la bonne, d’où le « login incorrect »…? (un dev dans la salle ? :slight_smile: )

peertube_1 | [<…>:443] 2024-12-18 18:10:50.500 warn: Login error {
peertube_1 | « err »: {
peertube_1 | « stack »: « SequelizeValidationError: Validation error: Validation isEmail on email failed\n at InstanceValidator._validate (/app/node_modules/sequelize/lib/instance-validator.js:50:13)\n at runMicrotasks ()\n at processTicksAndRejections (node:internal/process/task_queues:96:5)\n at async InstanceValidator._validateAndRunHooks (/app/node_modules/sequelize/lib/instance-validator.js:60:7)\n at async InstanceValidator.validate (/app/node_modules/sequelize/lib/instance-validator.js:54:12)\n at async UserModel.save (/app/node_modules/sequelize/lib/model.js:2426:7) »,
peertube_1 | « message »: « Validation error: Validation isEmail on email failed »,
peertube_1 | « name »: « SequelizeValidationError »,
peertube_1 | « errors »: [
peertube_1 | {
peertube_1 | « message »: « Validation isEmail on email failed »,
peertube_1 | « type »: « Validation error »,
peertube_1 | « path »: « email »,
peertube_1 | « value »: « untest »,
peertube_1 | « origin »: « FUNCTION »,
peertube_1 | « instance »: {
peertube_1 | « autoPlayNextVideo »: false,
peertube_1 | « autoPlayNextVideoPlaylist »: true,
peertube_1 | « videoLanguages »: null,
peertube_1 | « blocked »: false,
peertube_1 | « blockedReason »: null,
peertube_1 | « theme »: « instance-default »,
peertube_1 | « noInstanceConfigWarningModal »: false,
peertube_1 | « noWelcomeModal »: false,
peertube_1 | « noAccountSetupWarningModal »: false,
peertube_1 | « feedToken »: « 2e0d73d7-79ed-439f-822e-d009c4c8dd6b »,
peertube_1 | « lastLoginDate »: null,
peertube_1 | « emailPublic »: false,
peertube_1 | « otpSecret »: null,
peertube_1 | « id »: null,
peertube_1 | « username »: « untest-1 », (qui est le champ ‹ sub ›)
peertube_1 | « password »: null,
peertube_1 | « email »: « untest », (qui est le même champ ‹ sub ›)
peertube_1 | « nsfwPolicy »: « display »,
peertube_1 | « p2pEnabled »: true,
peertube_1 | « videosHistoryEnabled »: true,
peertube_1 | « autoPlayVideo »: true,
peertube_1 | « role »: 2,
peertube_1 | « emailVerified »: null,
peertube_1 | « adminFlags »: 0,
peertube_1 | « videoQuota »: -1,
peertube_1 | « videoQuotaDaily »: -1,
peertube_1 | « pluginAuth »: « peertube-plugin-auth-openid-connect »,
peertube_1 | « updatedAt »: « 2024-12-18T18:10:50.489Z »,
peertube_1 | « createdAt »: « 2024-12-18T18:10:50.489Z »
peertube_1 | },

Et pour compléter, voilà les log complets d’une transaction qui devrait réussir mais qui échoue :

peertube_1  | [<srv>:443] 2024-12-18 18:32:28.850 info: 192.168.1.1 - - [18/Dec/2024:18:32:28 +0000] "GET /plugins/auth-openid-connect/0.1.3/auth/openid-connect HTTP/1.0" 302 968 "https://<srv>/login?externalAuthToken=2fecf815fc92d9300551ae99672a0e10eb7c439ffed79cf6f519b6d555d065d6&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 
peertube_1  | [<srv>:443] 2024-12-18 18:32:30.750 info: Generating auth bypass token for un_user in auth openid-connect of plugin peertube-plugin-auth-openid-connect.
peertube_1  | [<srv>:443] 2024-12-18 18:32:30.760 info: 192.168.1.1 - - [18/Dec/2024:18:32:30 +0000] "GET /plugins/auth-openid-connect/router/code-cb?state=aPeWUbbb2jmpHqQuNaRwo6lrz7tOQFPb42o9TsajeT8&code=vlGOrOnfzFjFvS5bJucvTJlSbnoJgVk2Rcv6SDCzsF6EsHnavhrg8kTLlAPvK4vuaVeKim3WUKbnoeR9Vw8yaGWofgPf2BCsfBokRBL1vwGl0Pzw2ebnMbXUfp5GC0S1 HTTP/1.0" 302 264 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:30.810 info: 192.168.1.1 - - [18/Dec/2024:18:32:30 +0000] "GET /login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user HTTP/1.0" 200 13625 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.001 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "GET /api/v1/config/ HTTP/1.0" 304 - "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" 
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.015 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "GET /api/v1/oauth-clients/local HTTP/1.0" 304 - "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.038 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "GET /api/v1/videos/languages HTTP/1.0" 304 - "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.065 info: Auth success with external auth method openid-connect of plugin peertube-plugin-auth-openid-connect for <l_email_de_lutilisateur>.
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.079 info: Bypassing oauth login by plugin peertube-plugin-auth-openid-connect.
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.114 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "GET /manifest.webmanifest?41f022a735a157a098831862be5b88d78b2c290d HTTP/1.0" 304 - "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.455 warn: Login error {
peertube_1  |   "err": {
peertube_1  |     "statusCode": 400,
peertube_1  |     "status": 400,
peertube_1  |     "code": 400,
peertube_1  |     "message": "Invalid grant: user credentials are invalid",
peertube_1  |     "name": "invalid_grant",
peertube_1  |     "stack": "invalid_grant: Invalid grant: user credentials are invalid\n    at new InvalidGrantError (/app/node_modules/@node-oauth/oauth2-server/lib/errors/invalid-grant-error.js:26:14)\n    at /app/dist/server/lib/auth/oauth.js:114:19\n    at Generator.next (<anonymous>)\n    at fulfilled (/app/node_modules/tslib/tslib.js:164:62)\n    at runMicrotasks (<anonymous>)\n    at processTicksAndRejections (node:internal/process/task_queues:96:5)"
peertube_1  |   } 
peertube_1  | }   
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.465 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "POST /api/v1/users/token HTTP/1.0" 400 325 "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.510 error: Client log: Backend returned code 400, errorMessage is: Invalid grant: user credentials are invalid {
peertube_1  |   "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
peertube_1  |   "url": "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user"
peertube_1  | }
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.519 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "POST /api/v1/server/logs/client HTTP/1.0" 204 - "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.542 info: 192.168.1.1 - - [18/Dec/2024:18:32:31 +0000] "GET /api/v1/config/about HTTP/1.0" 304 - "https://<srv>/login?externalAuthToken=aaa5d6d19fc8d530215b68b195e166ebf71c5139c6be2c24aaa53a382f93204c&username=un_user" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"
peertube_1  | [<srv>:443] 2024-12-18 18:32:31.725 info: Cleaning video viewers.

Bonjour,

Vous pouvez remettre les logs avec le level debug d’activé ?

Bonjour,

En fait je viens de voir que la source docker que j’utilise est : chocobozzz/peertube:production-bullseye, et que cette source s’arrête à la version 5.2.1 … alors que la 7 est sortie.

Je ne vais pas vous faire perdre du temps sur cette version et vais essayer de passer en 7 puis retester.

Bonne journée,

Je viens de passer l’instance en 6.1.0 (image: chocobozzz/peertube:v6.1.0-bookworm)

Et j’ai le même problème. Je vais essayer de passer en v7,

Je suis passé en 7 ( production-bookworm )

Même symptôme, car visiblement cette partie n’a pas subie de changement depuis la v5 ? (j’ai quand même supprimé et re téléchargé par le GUI le plugin openid-xxx (mais pas ses dépendances … est-ce automatique ?).

En tout cas, ce que j’ai pu remarquer, c’est que le username (c.f. Configurer auth-openid-connect/OAuth2 avec Nextcloud? - #2 par withclm) saisi était mappé en « loginX-1 » pendant le processus quand l’utilisateur existait déjà dans PeerTube, et que sinon il restait inchangé en « loginX » … une piste ?

voilà les logs complets du démarrage jusqu’au « login », merci de votre aide ! :

redis_1     | 1:C 19 Dec 2024 09:24:52.990 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1     | 1:C 19 Dec 2024 09:24:52.990 # Redis version=6.2.16, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1     | 1:C 19 Dec 2024 09:24:52.990 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1     | 1:M 19 Dec 2024 09:24:52.993 * monotonic clock: POSIX clock_gettime
redis_1     | 1:M 19 Dec 2024 09:24:52.996 * Running mode=standalone, port=6379.
redis_1     | 1:M 19 Dec 2024 09:24:52.996 # Server initialized
redis_1     | 1:M 19 Dec 2024 09:24:52.998 * Loading RDB produced by version 6.2.16
redis_1     | 1:M 19 Dec 2024 09:24:52.998 * RDB age 28 seconds
redis_1     | 1:M 19 Dec 2024 09:24:52.999 * RDB memory usage when created 7.78 Mb
redis_1     | 1:M 19 Dec 2024 09:24:53.083 # Done loading RDB, keys loaded: 175, keys expired: 28.
redis_1     | 1:M 19 Dec 2024 09:24:53.083 * DB loaded from disk: 0.086 seconds
redis_1     | 1:M 19 Dec 2024 09:24:53.083 * Ready to accept connections
postgres_1  |
postgres_1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres_1  |
postgres_1  | 2024-12-19 09:24:53.135 UTC [1] LOG:  starting PostgreSQL 13.18 on x86_64-pc-linux-musl, compiled by gcc (Alpine 14.2.0) 14.2.0, 64-bit
postgres_1  | 2024-12-19 09:24:53.135 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres_1  | 2024-12-19 09:24:53.135 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres_1  | 2024-12-19 09:24:53.146 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres_1  | 2024-12-19 09:24:53.167 UTC [27] LOG:  database system was shut down at 2024-12-19 09:24:24 UTC
postgres_1  | 2024-12-19 09:24:53.193 UTC [1] LOG:  database system is ready to accept connections
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:07.898 info: Using following configuration file hierarchy: /app/config/default.yaml -> /app/support/docker/production/config/production.yaml -> /config/local-production.json -> /app/support/docker/production/config/custom-environment-variables.yaml.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:09.563 info: Database peertube is ready.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:11.232 info: Connecting to Redis in "standalone" mode...
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:11.236 info: Using standalone redis options {
peertube_1  |   "db": 0,
peertube_1  |   "host": "redis",
peertube_1  |   "port": 6379,
peertube_1  |   "path": null
peertube_1  | }
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:11.247 info: Using <smtp_srv>:465 as SMTP server.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:11.258 info: Testing SMTP server...
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:11.510 info: Connected to redis.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:12.899 info: Secure connection established to <ip>:465 {
peertube_1  |   "component": "smtp-connection",
peertube_1  |   "sid": "KXRRiFO7nxs",
peertube_1  |   "tnx": "network",
peertube_1  |   "localAddress": "172.30.0.42",
peertube_1  |   "localPort": 56054,
peertube_1  |   "remoteAddress": "<ip>",
peertube_1  |   "remotePort": 465
peertube_1  | }
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.014 info: User "..." authenticated {
peertube_1  |   "component": "smtp-connection",
peertube_1  |   "sid": "KXRRiFO7nxs",
peertube_1  |   "tnx": "smtp",
peertube_1  |   "username": "...",
peertube_1  |   "action": "authenticated",
peertube_1  |   "method": "PLAIN"
peertube_1  | }
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.018 info: Successfully connected to SMTP server.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.050 info: Running RTMP server on port 1935
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.120 info: Connection closed {
peertube_1  |   "component": "smtp-connection",
peertube_1  |   "sid": "KXRRiFO7nxs",
peertube_1  |   "tnx": "network"
peertube_1  | }
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.193 info: Registering plugin or theme peertube-plugin-auth-openid-connect.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.894 info: Add plugin peertube-plugin-auth-openid-connect CSS to global file.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.897 info: Cleaning HTML cache.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.898 info: Registering plugin or theme peertube-plugin-transcoding-custom-quality.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.926 info: Add plugin peertube-plugin-transcoding-custom-quality CSS to global file.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.928 info: Cleaning HTML cache.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.938 info: HTTP server listening on 0.0.0.0:9000
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:13.939 info: Web server: https://<peertube_url>

vvv  ..... C'est là où je clique sur le bouton "se connecter à [ Nextcloud ]" ....vvv

peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:35.397 info: <client_ip> - - [19/Dec/2024:09:25:35 +0000] "GET /plugins/auth-openid-connect/0.1.3/auth/openid-connect HTTP/1.0" 302 491 "https://<peertube_url>/login?externalAuthToken=5fb647bd74ccc371ecdd6ac8a2add253f16fefd247a9302970375c2363d41d8a&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.410 info: Generating auth bypass token for <login> in auth openid-connect of plugin peertube-plugin-auth-openid-connect.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.421 info: <client_ip> - - [19/Dec/2024:09:25:37 +0000] "GET /plugins/auth-openid-connect/router/code-cb?state=wHpf9u4esPWqfp3a9RDx-75V1mkEMVnXBEDSjRQgq-8&code=lrBeqedV52vKXvr6NJRTCfsiKKiUxLlf8iQeKh0HVNsTGjCtTxlVCTe0eQc0jhD2mmC2cyr9pYR6D2gi6bCayd7ysVixE98mwaF8ZMzxkbv5BrN2Jq8pz8oHhTyndZsd HTTP/1.0" 302 139 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.589 info: <client_ip> - - [19/Dec/2024:09:25:37 +0000] "GET /login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login> HTTP/1.0" 200 19308 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.762 info: <client_ip> - - [19/Dec/2024:09:25:37 +0000] "GET /api/v1/config/ HTTP/1.0" 200 4120 "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.774 info: <client_ip> - - [19/Dec/2024:09:25:37 +0000] "GET /api/v1/oauth-clients/local HTTP/1.0" 304 - "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.853 info: Auth success with external auth method openid-connect of plugin peertube-plugin-auth-openid-connect for <la_bonne_adress_email_de_l_utilisateur>.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.874 info: Bypassing oauth login by plugin peertube-plugin-auth-openid-connect.
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:37.893 info: <client_ip> - - [19/Dec/2024:09:25:37 +0000] "GET /client/assets/images/logo.svg?8e39c7294f0d9d05bb69d72bcb576b0ad73a4c18 HTTP/1.0" 200 486 "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.001 info: <client_ip> - - [19/Dec/2024:09:25:38 +0000] "GET /client/assets/images/favicon.png?3efa119dc27ed030475060981ef52b1e343c3551 HTTP/1.0" 200 746 "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.160 info: <client_ip> - - [19/Dec/2024:09:25:38 +0000] "GET /manifest.webmanifest?7cfb6aa953a35bf338205ec24d6edb7cfa1d09db HTTP/1.0" 200 883 "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.371 warn: Login error {
peertube_1  |   "err": {
peertube_1  |     "stack": "invalid_grant: Invalid grant: user credentials are invalid\n    at handlePasswordGrant (file:///app/dist/core/lib/auth/oauth.js:112:15)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async handleToken (file:///app/dist/core/controllers/api/users/token.js:32:23)",
peertube_1  |     "message": "Invalid grant: user credentials are invalid",
peertube_1  |     "statusCode": 400,
peertube_1  |     "status": 400,
peertube_1  |     "code": 400,
peertube_1  |     "name": "invalid_grant"
peertube_1  |   }
peertube_1  | }
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.378 info: <client_ip> - - [19/Dec/2024:09:25:38 +0000] "POST /api/v1/users/token HTTP/1.0" 400 271 "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.441 error: Client log: Backend returned code 400, errorMessage is: Invalid grant: user credentials are invalid {
peertube_1  |   "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0",
peertube_1  |   "meta": "{\"url\":\"https://<peertube_url>/api/v1/users/token\"}",
peertube_1  |   "url": "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>"
peertube_1  | }
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.447 info: <client_ip> - - [19/Dec/2024:09:25:38 +0000] "POST /api/v1/server/logs/client HTTP/1.0" 204 - "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<peertube_url>:443] 2024-12-19 09:25:38.460 info: <client_ip> - - [19/Dec/2024:09:25:38 +0000] "GET /api/v1/config/about HTTP/1.0" 304 - "https://<peertube_url>/login?externalAuthToken=4241c41ad71474375eadac9a0bdb1d0b810d6c535f33995157e8c7fbbaf5d195&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"

Merci d’activer les logs en mode debug :slight_smile:

Je pensait l’avoir fait, mais ne sachant pas trop comment, j’ai déjà ajouté/modifié (qui donne les logs ci-dessus) :

dans config/local-production.json :

{
  "log": {
    "level": "debug"
  },
  "instance": {
    "log": {
      "level": "debug"
    },
    "name": "PeerTube",

et dans /app/config/default.yaml (et aussi production.yaml)

log:
  level: 'debug' # 'debug' | 'info' | 'warn' | 'error'
logs:
  level: 'debug' # 'debug' | 'info' | 'warn' | 'error'

et il n’y a pas d’autres endroit plus bas dans ces 2 fichiers qui auraient redéfini ou surchargé ‹ log[s] ›, que faire de plus (désolé :smiling_face:) ?

Vous avez redémarré le container ?

des fois on se complique la vie …
PEERTUBE_LOG_LEVEL=debug :sweat_smile:

Je vous ai envoyé le log d’une transaction en MP sur matrix (plus de 20ko, existe-t-il un autre moyen ?).

Mais on voit bien qu’il récupère correctement les infos du Nextcloud :

peertube_1  | [<srv>:443 peertube-plugin-auth-openid-connect] 2024-12-19 12:10:35.804 debug: Got userinfo from openid auth. {
peertube_1  |   "userInfo": {
peertube_1  |     "sub": "<login>",
peertube_1  |     "preferred_username": "<login>",
peertube_1  |     "roles": [],
peertube_1  |     "updated_at": 1734608938,
peertube_1  |     "name": "<le display_name>",
peertube_1  |     "quota": "500 GB",
peertube_1  |     "email": "<email>",
peertube_1  |     "email_verified": false
peertube_1  |   },
peertube_1  |   "settings": {
peertube_1  |     "mail-property": "email",
peertube_1  |     "username-property": "sub",
peertube_1  |     "display-name-property": "name",
peertube_1  |     "role-property": "",
peertube_1  |     "group-property": "",
peertube_1  |     "allowed-group": ""
peertube_1  |   }
peertube_1  | }

Il y a aussi la ligne :

peertube_1  | [<srv>:443] 2024-12-19 12:10:36.499 debug: Getting User (username/email: <login>, password: ******).

Suivi d’un gros select :

peertube_1  | [<srv>:443] 2024-12-19 12:10:36.522 debug: Executed SQL request - Executing (default): SELECT "UserModel".*, "Account->Actor->Server"."id" AS ...

Suivi par 2 GET, dont seul le second semble provoquer l’erreur :

peertube_1  | [<srv>:443] 2024-12-19 12:10:36.531 info: 147.94.140.147 - - [19/Dec/2024:12:10:36 +0000] "GET /client/assets/images/favicon.png?a8aa20780142ae52f08d1ebdc4b6e104fc37619d HTTP/1.0" 200 746 "https://<srv>/login?externalAuthToken=a4a6bbd6f4354bfd9975720e4e1603ccd144cb154dd8477c126024ebad32b1cb&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.750 info: 147.94.140.147 - - [19/Dec/2024:12:10:36 +0000] "GET /manifest.webmanifest?7aeb83a51326b2ba7eb6facb7e94c4e65f799948 HTTP/1.0" 200 883 "https://<srv>/login?externalAuthToken=a4a6bbd6f4354bfd9975720e4e1603ccd144cb154dd8477c126024ebad32b1cb&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.873 debug: Executed SQL request - Executing (default): SELECT "id", "state", "registrationReason", "moderationResponse", "password", "username", "email", "emailVerified", "accountDisplayName", "channelHandle", "channelDisplayName", "processedAt", "userId", "createdAt", "updatedAt" FROM "userRegistration" AS "UserRegistrationModel" WHERE ("UserRegistrationModel"."email" = '<login>' OR "UserRegistrationModel"."username" = '<login>') LIMIT 1;
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.891 warn: Login error {
peertube_1  |   "err": {
peertube_1  |     "stack": "invalid_grant: Invalid grant: user credentials are invalid\n    at handlePasswordGrant (file:///app/dist/core/lib/auth/oauth.js:112:15)\n    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n    at async handleToken (file:///app/dist/core/controllers/api/users/token.js:32:23)",
peertube_1  |     "message": "Invalid grant: user credentials are invalid",
peertube_1  |     "statusCode": 400,
peertube_1  |     "status": 400,
peertube_1  |     "code": 400,
peertube_1  |     "name": "invalid_grant"
peertube_1  |   }
peertube_1  | }
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.895 debug: Bad HTTP request. {
peertube_1  |   "json": {
peertube_1  |     "type": "https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/invalid_grant",
peertube_1  |     "detail": "Invalid grant: user credentials are invalid",
peertube_1  |     "status": 400,
peertube_1  |     "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getOAuthToken",
peertube_1  |     "code": "invalid_grant"
peertube_1  |   }
peertube_1  | }
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.900 info: 147.94.140.147 - - [19/Dec/2024:12:10:36 +0000] "POST /api/v1/users/token HTTP/1.0" 400 271 "https://<srv>/login?externalAuthToken=a4a6bbd6f4354bfd9975720e4e1603ccd144cb154dd8477c126024ebad32b1cb&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.971 debug: Checking POST - /api/v1/server/logs/client parameters {
peertube_1  |   "body": {
peertube_1  |     "message": "Backend returned code 400, errorMessage is: Invalid grant: user credentials are invalid",
peertube_1  |     "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0",
peertube_1  |     "url": "https://<srv>/login?externalAuthToken=a4a6bbd6f4354bfd9975720e4e1603ccd144cb154dd8477c126024ebad32b1cb&username=<login>",
peertube_1  |     "level": "error",
peertube_1  |     "meta": "{\"url\":\"https://<srv>/api/v1/users/token\"}"
peertube_1  |   },
peertube_1  |   "params": {},
peertube_1  |   "query": {}
peertube_1  | }
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.974 error: Client log: Backend returned code 400, errorMessage is: Invalid grant: user credentials are invalid {
peertube_1  |   "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0",
peertube_1  |   "meta": "{\"url\":\"https://<srv>/api/v1/users/token\"}",
peertube_1  |   "url": "https://<srv>/login?externalAuthToken=a4a6bbd6f4354bfd9975720e4e1603ccd144cb154dd8477c126024ebad32b1cb&username=<login>"
peertube_1  | }
peertube_1  | [<srv>:443] 2024-12-19 12:10:36.979 info: 147.94.140.147 - - [19/Dec/2024:12:10:36 +0000] "POST /api/v1/server/logs/client HTTP/1.0" 204 - "https://<srv>/login?externalAuthToken=a4a6bbd6f4354bfd9975720e4e1603ccd144cb154dd8477c126024ebad32b1cb&username=<login>" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36 OPR/115.0.0.0"

En fait le problème semble venir de la requête SQL qui renvoie 0 row(s) !

 SELECT "id", "state", "registrationReason", "moderationResponse", "password", "username", "email", "emailVerified", "accountDisplayName", "channelHandle", "channelDisplayName", "processedAt", "userId", "createdAt", "updatedAt" FROM "userRegistration" AS "UserRegistrationModel" WHERE ("UserRegistrationModel"."email" = '<login>' OR "UserRegistrationModel"."username" = '<login>') LIMIT 1;

Je viens de la rejouer dans le container postgresql sans clause de sélection, et cette table est vide dans ma base ?! (tous les utilisateurs sont dans la table ‹ user ›)

Je suggère de vérifier dans la liste des utilisateurs, que l’utilisateur avec pour email celui retourné par nextcloud, ait bien Plugin auth avec pour valeur le plugin openid

Bravo !

La colonne « pluginAuth » est vide pour tous les utilisateurs dans la table « user ».

Je suis allé dans l’utilisateur en question par le web et changé le champ : « Plugin d’authentification » en « peertube-plugin-auth-openid-connect »

Et ça fonctionne …!

Merci à vous, je vais faire la modif directement dans la base car je ne tiens pas à le faire à la main pour tous les utilisateurs :sweat_smile:

Pour ceux qui voudraient faire la même chose, voilà en gros l’affaire :

UPDATE "user" SET "pluginAuth" = 'peertube-plugin-auth-openid-connect' where "username" != 'root';

Encore merci !

Beaucoup de temps perdu, mais qui servira de doc en attendant, car il me semble que ce n’est pas indiqué dans la doc officielle (si doc il y avait sur cette partie).

Un dernier petit point qui pourrait être ajouté, serait que quand on arrive sur une page quelconque d’une instance peertube sans être authentifié (ou juste la page principale /), qu’il essaie automatiquement de loguer l’utilisateur déjà authentifié de manière externe (dans Nextcloud en l’occurrence), comme avec le SSO, mais de ce que j’en ai vu, je pense que ce procédé n’est pas compatible avec ce protocole,

Dernier petit point, l’application pour Smartphone « PeerTube Live » ne fonctionne plus avec le plugin openid actif : que l’utilisateur utilise cette méthode ou pas dans son profil, et/ou en utilisant le mot de passe Nextcloud ou « l’ancien mot de passe PeerTube » : le message est : Erreur JSON

Mais ce sera l’occasion d’un autre post ; À chaque jour suffit sa peinne. :smile:

Le bug est soumis depuis 2 ans, mais le développeur ne connaît pas bien openid. Il dit que l’App tente de se connecter par le OAuth de PeerTube … qui doit l’envoyer bouler du coup ?