如何通過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 )

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM