Embedded authorization issue
Hello community. I can`t authorize users from embedded forum. Can you help me with this issue?
I use Angular + Java.
My java code for generating the SSO string (slightly modified code from official jsConnect library (original don`t work)):
public static String SSOString(Map user, String timeStamp) throws InvalidKeyException {
if (!user.containsKey("client_id")) {
user.put("client_id", CLIENT_ID);
}
if (user.get("client_id") == null || user.get("client_id") == "") {
user.put("client_id", CLIENT_ID);
}
String jsonBase64String = new String(DatatypeConverter.printBase64Binary(JsonEncode(user).getBytes())); String signature_string = Hex.encodeHexString(jsonBase64String.getBytes()); StringBuilder signatureString = new StringBuilder(); signatureString.append(signature_string); signatureString.append(" "); signatureString.append(timeStamp); Mac mac; byte[] result = null; SecretKeySpec keySpec = new SecretKeySpec(SECRET.getBytes(), "HmacSHA1"); try { mac = Mac.getInstance("HmacSHA1"); mac.init(keySpec); result = mac.doFinal(signatureString.toString().getBytes()); } catch (NoSuchAlgorithmException ex) { log.debug(ex.getMessage()); }
/* String usertext = jsonBase64String;
String timestamptext = timeStamp;*/
String hash = new String(hexEncode(result));
String returnValue = signature_string + " " + hash + " " + timeStamp + " hmacsha1"; return returnValue; }
Front-End code of embedded forum with SSO string:
export class ForumPage implements OnInit {
constructor(private dataStorage: DataStorageService,
private auth: AuthService,
private profileStore: ProfileStore) {
}
public ngOnInit(): void {
if (!this.dataStorage.forumAuth) {
this.setForumSsoAndInit();
} else {
this.initForum();
}
}
private initForum() {
if ((window).vanilla_identifier) {
(window).vanilla_identifier = undefined;
(window).vanilla_title = undefined;
}
let forumScript = document.createElement('script');
forumScript.src = ${FORUM_PATH}js/embed.js
;
let container = document.getElementById('forum-container');
let element = container.getElementsByClassName('scroll-content')[0];
element.insertBefore(forumScript, element.lastChild);
}
private setForumSsoAndInit() {
this.profileStore.profileData.subscribe(
(res) => {
this.auth.setForumSsoString(res.toJS().email);
this.initForum();
},
(err) => {
console.log(err);
}
)
}
}
Secret and client_id I get from jsConnect settings.
Do I need to modify something else or something wrong with the generating string?
Thank you.