如何通过REST API登录Portal for ArcGIS

Portal for ArcGIS 提供了两种登录方式:OAuth 2.0和传统的token登录方式。

OAuth 2.0的登录原理在之前的一篇文章中已经描述,所以今天就不重复了。下面将介绍对于不支持OAuth2.0的应用,如何通过REST API登录Portal for ArcGIS。

其关键是通过ArcGIS REST API中提供的一个生成令牌的接口获得token,然后把token和相关的登录账户信息保存到一个名为esri_auth的cookie中。同时要注意cookie的domain必须和Portal for ArcGIS的访问地址一致,如果不一致,可通过代理页来完成cookie的写入和页面跳转工作。

生成令牌的接口说明如下:

https://<root-url>/generateToken(POST only)

该接口只支持HTTP POST方法。

相关参数为:

参数 说明
username 用户名
password 密码
client 只支持取值为referer
referer 登录后,跳转的应用基础url
expiration token超时设置,默认为60分钟

下面为示例代码,这里使用jQuery作为前端JS发送POST请求,实际应用时建议采用后端代码执行方式:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="UTF-8">
 5         <meta name="viewport" content="width=device-width">
 6         <title>Demo</title>
 7         <link rel="stylesheet" href="css/style.css">
 8         <script src="components/jquery/dist/jquery.js"></script>
 9         <script src="components/jquery-ui/jquery-ui.js"></script>
10         <script src="components/jquery.cookie/jquery.cookie.js"></script>
11         <script src="js/index.js"></script>
12     </head>
13     <body>
14         <p>Name</p>
15         <input id="Name" type="text">
16         <p>Password</p>
17         <input id="Password" type="text">
18         <br>
19         <button>Login</button>
20         <br>
21         <a href="https://webgis40.esrigz.com/portal">Portal</a>
22     </body>
23 </html>

下面是对应的JavaScript代码,实际在请求获得token后,还需要通过REST API请求登录用户的个人信息,包括email、culture、accountId、role,为了简单演示,把这些信息硬编码写在代码中了:

 1 $(function () {
 2   $("button").click(function () {
 3     $.cookie('name','value')
 4     let n = $('#Name').val()
 5     let p = $('#Password').val()
 6     let url = 'https://webgis40.esrigz.com/portal/sharing/rest/generateToken'
 7     let redirect = 'https://webgis40.esrigz.com/portal'
 8     data = { username: n, password: p, referer: redirect, client: 'referer',f:'json'}
 9     $.post(url, data).done((d) => {
10       let tokenHolder = JSON.parse(d)
11       let encode_token = encodeURI(tokenHolder.token)
12       let expires = tokenHolder.expires
13       //console.log(encode_token)
14 
15       let auth = { "portalApp": true, "email": "portaladmin", "token": tokenHolder.token, "culture": "en", "region": null, "expires": tokenHolder.expires,"allSSL":false,"accountId":"0123456789ABCDEF","role":"org_admin"}
16       
17       $.cookie('esri_auth', JSON.stringify(auth), { path: '/', domain:'webgis40.esrigz.com'})
18       window.location = redirect //支持自动跳转,如果不需要,则屏蔽该行代码。
19     }
20     )
21   })
22 }
23 )

猜你喜欢

转载自www.cnblogs.com/luwl/p/8966325.html
今日推荐