跨域登录
注意
跨域访问为了增强安全性可以使用令牌访问、用户验证等系统自带的方式,也可以自定义 Token 在函数里自主判断来验证。
本章节讲述系统自带的
用户验证在跨域情况下的使用方式使用该功能下载V2025.1.1.5版获取最佳效果
一、适用情况
跨域 访问端域名和 VDN 域名不同
用户验证 要求验证用户名密码通过后才能调用其他 WebAPI 函数,例如:amis 框架里访问 WebAPI,先登录才能继续后续的操作。
二、系统设置
1.1、 Session 设置
Session
用户登录后登录信息会被保存在 Session 里
常规情况下前端通过 Cookie 来传递 SessionID,系统通过 SessionID 和具体 Session 相关联,但是在跨域的情况下很多新版浏览器不再支持 Cookie,这时候可以将 SessionID 通过 Header 来传递

开启允许跨域
设置 Header Key
这个 Key 将用在前端携带 SessionID 时使用,例如上图设置为 Sid
综合验证
【综合验证】 启用的情况下会对来源 IP 等信息进行验证,保证请求来自同一客户端,但一些特殊的客户端来源 IP 会变动导致访问失败。
这个根据对安全性的要求来合理选择
1.2、 WebAPI 设置

开启允许跨域
来源如果固定也可以开启【验证来源】,然后在【访问来源】设置来源 URL
1.3、 项目发布

- 项目发布-扩展属性-身份验证选择【用户验证】
三、用户登录
string ls_sessionID,ls_crypt
//API 跨域Session
//这里省略用户名和密码的判断 通过参数或者JSON传递用户信息
//.............
//wa_setlogin 存储用户登录信息
guo_vdn.wa_setlogin(as_id)
//SessionID
ls_sessionID = guo_vdn.wa_getSystem("SessionID")
//Des加密(CBC+PKCS7 返回Base64格式)加密,秘钥为服务器端的DesKey
guo_vdn.Crypto_OutType = guo_vdn.CrpytoOutType_Base64
ls_crypt = guo_vdn.desEncode(ls_sessionID,"Topany")
return "ok:"+ ls_cryptguo_vdn.wa_setLogin(ID) 用来记录用户登录信息,告知系统用户已经登录;通过 wa_getLogin()可以再获取这个信息
guo_vdn.wa_getSystem("SessionID")来获取 SessionID
将 SessionID 经过 Des 加密(CBC+PKCS7 返回 Base64 格式)后返回给前端
$.ajax({
url: "http://www.test.net:8088/pbplugin/f_login_nv¶ms=123",
type: "POST",
data: '{user:"user1",pwr:"pwr%&%%*"}' //这里建议对用户名密码都加密传输
// 可选:明确指定跨域(部分浏览器需要)
crossDomain: true,
success: function(data, status, xhr) {
//返回格式ok:SessionID加密串(可以自定义)
if(data.substr(0, 2) == "ok") {
SID = data.substr(3);
//存储前台返回的SessionID加密串
sessionStorage.setItem("SID",SID);
……- 登录函数名以
_nv结尾,代表该函数不用经过身份验证 - sessionStorage.setItem("SID",SID); 存储这个 ID 供后面调用其他函数使用
四、函数调用
$.ajax({
url: "http://www.test.net:8088/pbplugin/f_getdata¶ms=123",
type: "GET",
headers: {
Sid: sessionStorage.getItem("SID"), //Header携带SessionID
},
success: function (data, status, xhr) {
//...............
},
error: function (xhr, error, exception) {
//ajax 发生错误
alert(error + " " + exception.toString() + " (status:" + xhr.status + " state:" + xhr.readyState + ")");
},
});请求时在 Header 里携带登录时返回的 SessionID,即可正常访问
Header Key 为上方【Session 设置】中设置的 Header
如果不携带 SessionID 或者 Sesseion 失效,将返回错误信息:
- ResponseCode(status) = 401
- statusText = Unauthorized
- ResponseText = error/Not allowed to access:not login system [EC:3031249-1255]
