node.js用saml2连接Identity Provider服务器完成Azure AD/Active Directory域帐号身份认证


发布者 ourjs  发布时间 1679642750810
关键字 Node.JS 

Azure Active Directory提供无缝单一登录,介绍如下:

https://learn.microsoft.com/zh-cn/azure/active-directory/hybrid/how-to-connect-sso-quick-start

网站可通过 saml2 或 oauth2 协议,通过Windows域帐号登陆网站应用:

1. 首先网络管理员可在identity provider创建一个新的idp帐号,

比如某个创建好的信息帐号如下:

Entity id : urn:saml2:yourentityname:youtentitytag
ACS or Sign end point: https://your.sso.doamin.com/logincallback

Metadata URL: https://login.id.server/openam/saml2/jsp/exportmetadata.jsp?entityid=urn:your:company:sso:id:s:latest:2031&realm=/company

IDP Initiated url: https://login.id.server.com/openam/saml2/jsp/idpSSOInit.jsp?metaAlias=/company/idpid10x&spEntityID=urn:saml2:yourentityname:youtentitytag


其中 Metadata URL 中定义了 X509Certificate 证书,如下所示

 
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EntityDescriptor entityID="urn:pwc:cert:preferredmail:s:latest:2031" xmlns="urn:oasis:names:tc:SAML:2.0:metadata" xmlns:query="urn:oasis:names:tc:SAML:metadata:ext:query" xmlns:mdattr="urn:oasis:names:tc:SAML:metadata:attribute" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:xenc="http://www.w3.org/2001/04/xmlenc#" xmlns:x509qry="urn:oasis:names:tc:SAML:metadata:X509:query" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<IDPSSODescriptor WantAuthnRequestsSigned="false" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<KeyDescriptor use="signing">
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
################################## YOUR CERTIFICATE TOKEN ##################################
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</KeyDescriptor>

node.js创建saml2登陆的代码如下,将上文中的


entryPoint: 填入 IDP Initiated url
cert: 填入 Meta url 中的 X509Certificate
path: 填入 callback url

 

 
const strategy = new Strategy(Object.assign({
protocol: "https",
path: "/logincallback",
entryPoint: "https://your.saml2.sso.init.url",
cert: "**NEED TO OVERRDIE**",
}, CONFIG.IDENTITY), (profile: any, done: any) => {
done(null, profile)
})

passport.use(strategy)

passport.serializeUser(function(user: any, done) {
done(null, user.nameID);
})

passport.deserializeUser(function(id: string, done) {
done(null, { id })
})

app.use(passport.initialize())
app.use(passport.session())

app.get('/login',
passport.authenticate('saml', {
failureRedirect: '/',
failureFlash: true
}),
function (req, res) {
res.redirect('/dashboard/')
}
)

app.post('/logincallback',
passport.authenticate('saml', {
failureRedirect: "/",
failureFlash: true,
}),
function (req, res) {
req.session.user = { username: req.session.passport.user }
res.redirect("/dashboard/")
}
)

 

此时如果ID server配置正确,可通过访问 https://your.domain.com/login 通过域帐号登录入系统 

 









 热门文章 - 分享最多
  1. node.js中用typescript连接mongodb数据并设置断开后自动重启连接
  2. git 将本地仓库关连并push远程
  3. 在Windows10上创建node.js开机启动脚本服务Task Scheduler failed to start: Error Value: 2147943711.
  4. Windows和MacOS获取当前Active Directory域的用户名和AD服务器域名
  5. JavaScript通过toLocalString格式化format各个国家本地日期时间
  6. puppeteer窗口最大化及改变窗口大小
  7. 使用node.js\Express\TypeScript\Nodemon和EsLint创建项目,并通过babel导入import绝对路径
  8. Rust 中的闭包及捕获上下文环境变量使用和更改及闭包的引用
  9. Flex布局基础概念及入门实例教程
  10. 纯CSS实现圆形动画进度百分比饼图Percentage Circle with Animation

 相关阅读
  1. 用Node.JS写一个简单版的类似pm2\forever的守护进程并记录错误日志
  2. NodeJS在Windows上使用OLE/COM/ActiveXObject对象连接ADODB数据库,操作Application.Excel、运行VBA宏并另存为网页
  3. MongoDB起步入门教程使用Node.JS的Promise方式查找数据
  4. Node.JS连接MySQL数据库执行增删改查提示ER_NOT_SUPPORTED_AUTH_MODE: Client does not support;如何在@mysql/xdevapi执行SQL
  5. node.js中async/await不用try/catch,使用error first或go语言方法处理异常
  6. JavaScript和node.js内存泄露的原因和避免方法及Chrome调试工具使用教程
  7. node.js性能压力测试入门教程:wrk和loadtest安装使用
  8. Html5网页中用JavaScript调用本地手机摄像头扫描识别微信二维码、条形码:postMessage跨域https传递扫码结果消息
  9. node.js通过Error.prepareStackTrace获取上层调用函数的文件名地址和行数位置
  10. webpack前端项目调试环境安装入门:webpack.config.js禁用UglifyJs只合并JavaScript不压缩混淆代码

  开源的 OurJS
OurJS开源博客已经迁移到 OnceOA 平台。

  关注我们
扫一扫即可关注我们:
OnceJS

OnceOA