• 如何通过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 )
  • 相关阅读:
    【链表】Remove Duplicates from Sorted List II(三指针)
    【链表】Reorder List
    【链表】 Reverse Linked List II
    【链表】Rotate List(三个指针)
    【链表】Sort List(归并排序)
    【链表】Swap Nodes in Pairs(三指针)
    数组中常用算法(方法)总结
    使用 gitee 托管你的 go 模块
    git库移植
    git 访问方式浅谈
  • 原文地址:https://www.cnblogs.com/luwl/p/8966325.html
Copyright © 2020-2023  润新知