我正在尝试使用Okta作为我的IdP使用SAML进行注销。我在Okta日志中收到“发行人不匹配”的信息:
我已经设置了一次注销:
上传的证书是我的SP公钥。
明智的代码:
const config = require('../../app/config')
const saml = require('saml2-js')
module.exports = {
sp: new saml.ServiceProvider({
entity_id: `${config.HOSTNAME}/saml/assert`,
private_key: config.SAML_SP_PRIVATE_KEY,
certificate: config.SAML_SP_PUBLIC_KEY,
assert_endpoint: `${config.HOSTNAME}/saml/assert`,
allow_unencrypted_assertion: true,
sign_get_request: true
}),
idp: new saml.IdentityProvider({
sso_login_url: config.SAML_SSO_LOGIN_URL,
sso_logout_url: config.SAML_SSO_LOGOUT_URL,
certificates: config.SAML_SSO_IDP_CERT,
sign_get_request: true
})
}
注销功能:
if (!req.signedCookies.token) {
res.status(400).send('Missing token')
return
}
const tokenData = await jwtVerify(req.signedCookies.token, config.AUTH_SECRET)
const options = {
name_id: tokenData.name_id,
session_id: tokenData.session_id,
sign_get_request: true
}
const createLogoutRequestUrl = util.promisify(sp.create_logout_request_url).bind(sp)
const logoutUrl = await createLogoutRequestUrl(idp, options)
res.redirect(logoutUrl)
答案 0 :(得分:0)
确定发现了我的错误:
我的SP entity_id应该是元数据URL
entity_id: `${config.HOSTNAME}/saml/metadata`,
配置也应该反映在okta中: