Basic Authentication#
Many servers require authentication. PyDAP includes an extension mechanism so that it can interact with different kinds of authentication systems.
In this short tutorial notebook, we will cover basic EarthDatalogin
(EDL
) authentication with
username/password
.tokens
making use of Python’s Requests HTTP library to create a session. Of the two approaches above, token authentication
will be used and generally recommended thoughout the documentation.
These two types of authentications will be used to access the same dataset, both on OPeNDAP’s Hyrax server. A similar approach can be used to access data on a different server.
Note
For a broader introduction to authentication, check the OPeNDAP
documentation on Authentication for DAP Clients, and Client Authentication With EDLTokens.
import requests
from pydap.client import open_url
dataset_url = "https://opendap.earthdata.nasa.gov/providers/POCLOUD/collections/ECCO%20Ocean%20Temperature%20and%20Salinity%20-%20Monthly%20Mean%200.5%20Degree%20(Version%204%20Release%204)/granules/OCEAN_TEMPERATURE_SALINITY_mon_mean_2017-12_ECCO_V4r4_latlon_0p50deg"
username / password approach#
from pydap.cas.urs import setup_session
username = "YourUsername" # Earthdata URS Login Get account here https://urs.earthdata.nasa.gov/
password = "YourPassword"
hyrax_url = 'https://opendap.earthdata.nasa.gov/collections/C2532426483-ORNL_CLOUD/granules/'
session = setup_session(username, password, check_url=hyrax_url)
Now, we open the remote dataset#
ds = open_url(dataset_url, session=session, protocol='dap4')
ds.tree()
.OCEAN_TEMPERATURE_SALINITY_mon_mean_2017-12_ECCO_V4r4_latlon_0p50deg.nc
├──SALT
├──THETA
├──Z_bnds
├──latitude_bnds
├──time_bnds
├──longitude_bnds
├──Z
├──latitude
├──longitude
├──nv
└──time
Note
No data has been downloaded yet!
Token Approach#
This is the approach that will largely will be used throughout the documentation.
edl_token = "YourToken"
auth_hdr="Bearer " + edl_token
# pass Token Authorization to a new Session.
my_session = requests.Session()
my_session.headers={"Authorization": auth_hdr}
ds = open_url(dataset_url, session=my_session, protocol='dap4')
ds.tree()
.OCEAN_TEMPERATURE_SALINITY_mon_mean_2017-12_ECCO_V4r4_latlon_0p50deg.nc
├──SALT
├──THETA
├──Z_bnds
├──latitude_bnds
├──time_bnds
├──longitude_bnds
├──Z
├──latitude
├──longitude
├──nv
└──time
Note
Similarly, no data has been downloaded yet!