Nous utilisons Firebase comme fournisseur SSO externe. Nous avons suivi les instructions de Discourse à ce sujet.
Nous obtenons une erreur dans les journaux comme suit :
Journal SSO détaillé : Démarrage du processus SSO add_groups: admin: moderator: avatar_force_update: avatar_url: bio: card_background_url: email: external_id: groups: locale: locale_force_update: logo
Journal SSO détaillé : Le nonce a déjà expiré add_groups: admin: moderator: avatar_force_update: avatar_url: bio: card_background_url: email: [vrai email]: external_id: [id externe]
Nous voyons également dans les journaux de Discourse :
Journal SSO détaillé : Démarrage du processus SSO
add_groups:
admin:
moderator:
avatar_force_update:
avatar_url:
bio:
card_background_url:
email:
external_id:
groups:
locale:
locale_force_update:
logout:
name:
nonce: 773cb9d08db7007c9fb833e6c5e3a701
profile_background_url:
remove_groups:
require_activation:
return_sso_url: https://discouse-site/session/sso_login
suppress_welcome_message:
title:
username:
website:
location:
ET
Journal SSO détaillé : Le nonce a déjà expiré
add_groups:
admin:
moderator:
avatar_force_update:
avatar_url:
bio:
card_background_url:
email: [vrai email]
external_id: Be06ze0v0YO7I8SArWRoUVsxJ1k1
groups:
locale:
locale_force_update:
logout:
name: [vrai email]
nonce: Ym05dVkyVTlOV0kwTTJVeU1UTTVNamN6TnpNd01UbG1aVEJtWkRjMFlqTmtOV1U1TmpJbWNtVjBkWEp1WDNOemIxOTFjbXc5YUhSMGNITWxNMEVsTWtZbE1rWmpiMjF0ZFc1cGRIa3VZbTl2Wnk1aGNIQWxNa1p6WlhOemFXOXVKVEpHYzNOdlgyeHZaMmx1
profile_background_url:
remove_groups:
require_activation:
return_sso_url: https://discouse-site/session/sso_login
suppress_welcome_message:
title:
username: [vrai email]
website:
location:
Toute aide de l’équipe de Discourse serait appréciée, car nous ne pouvons actuellement pas utiliser le site.
James
pfaffman
(Jay Pfaffman)
Janvier 16, 2021, 1:50
2
Je ne suis pas expert en la matière, mais je suppose qu’il faut vérifier si votre horloge est correcte.
Merci pour la suggestion, mais l’horloge ne semble pas être en cause. Le serveur Discourse et le serveur qui génère le nonce sont synchronisés sur la même heure.
Je partage la méthode que nous utilisons pour générer l’URL de redirection, dans l’espoir d’éclaircir davantage ce problème :
public String generateSSORedirectURL(String nonce, String email, String uid) {
// Générer le contenu de retour
HashMap<String, String> params = new HashMap<String, String>();
params.put("nonce", nonce);
params.put("external_id", uid);
params.put("email", email);
params.put("username", email);
params.put("require_activation", "false");
params.put("name", email);
params.put("return_sso_url", "https://discourse-site/session/sso_login");
log.info("params {}", params);
// Préparer le contenu de retour
String encodedParams = params.keySet().stream()
.map(key -> key + "=" + encodeValue(params.get(key)))
.collect(Collectors.joining("&"));
log.info("paramètres encodés {}", encodedParams);
String returnPayload = Base64.getEncoder().encodeToString(encodedParams.getBytes());
log.info("return Payload {}", returnPayload);
// Calculer la signature hmacSha256 pour le contenu
byte[] hmacSha256 = calcHmacSha256(ssoSecret.getBytes(), returnPayload.getBytes());
log.info("hmacSha256 sig {}", hmacSha256);
String hmacSha265Hex = String.format("%x", new BigInteger(1, hmacSha256));
log.info("hmacSha256, sig en Hex {}", String.format("%x", new BigInteger(1, hmacSha256)));
HashMap<String, String> params2 = new HashMap<String, String>();
params2.put("sig", hmacSha265Hex);
params2.put("sso", returnPayload);
log.info("params2 {}", params);
String encodedParams2 = params2.keySet().stream()
.map(key -> key + "=" + encodeValue(params2.get(key)))
.collect(Collectors.joining("&"));
log.info("paramètres encodés {}", encodedParams2);
// Construire et retourner la chaîne de requête
String queryString = forumUrl + "session/sso_login?" + encodedParams2;
log.info("queryString {}", queryString);
return queryString;
}
cb-candor
(Colin Bethea)
Mars 9, 2021, 12:17
5
Avez-vous fini par trouver une solution ? @James_Hope