arcpy.SignInToPortal token expires after 12 hours

156
4
Jump to solution
2 weeks ago
NeilEtheridge
New Contributor III

I have a script that runs for a long time (2 days) for deploying a large Utility Network.  The script makes a connection to portal early on using the SignInToPortal function, however by the time subsequent commands are run I get a ...

Error: ERROR 002119: Must be connected and signed into the portal.
Failed to execute (AssetPackageToUtilityNetwork).

I checked the token returned by SignInToPortal and it expires 12 hours after the request.  Using Fidder to capture the request I can see "expiration" is part of the request.

/portal/sharing/rest/generateToken/username=utilitynetworkowner&password=abcdefg&expiration=720&client=referer&referer=http://www.esri.com/AGO/B90FF998-17C8-4248-8F0A-A7000000000

Is there anyway to change the timeout request?

 

Thanks,

Neil

0 Kudos
1 Solution

Accepted Solutions
GintautasKmieliauskas
Regular Contributor

Hi,

In one of my projects I refresh token (if needed) before using token in some operation. I do it a little bit earlier than token expires.

View solution in original post

4 Replies
JakeSkinner
Esri Esteemed Contributor

@NeilEtheridge  you could generate the token with the below code, which includes the expiration parameter.  This value is in minutes, and the max is 15 days:

import requests, json

# Disable warnings
requests.packages.urllib3.disable_warnings()

username = "portaladmin"
password = "********"

tokenURL = 'https://portal.esri.com:7443/arcgis/sharing/rest/generateToken/'
params = {'f': 'pjson', 'username': username, 'password': password, 'referer': 'https://portal.esri.com', 'expiration': 21600}

r = requests.post(tokenURL, data = params, verify=False)
response = json.loads(r.content)
token = response['token']
print(token)
NeilEtheridge
New Contributor III

Thanks Jake for the reply - I should have thought to try it this way as I already do similar in other scripts when making direct calls to the REST interface.  I wasn't sure if subsequent Utility Network commands would recognise this token so went with the down the same track as Gintautas has suggested below.

0 Kudos
GintautasKmieliauskas
Regular Contributor

Hi,

In one of my projects I refresh token (if needed) before using token in some operation. I do it a little bit earlier than token expires.

View solution in original post

NeilEtheridge
New Contributor III

Thanks Gintautas.  This was the approach went with ... just checking the token hadn't expired before I needed it again.

Cheers,

Neil

0 Kudos