Skip to main content
# Nexaas ID Client

This is a client for Nexaas ID. It brings support for generic OAuth
authentication and for Django and Flask frameworks.

## OAuth client

The general use is:

```python
from nexaas_id_client import NexaasIDOAuthClient

client = NexaasIDOAuthClient(
application_token,
application_secret,
server='id.nexaas.com',
redirect_uri=application_callback,
)
```

The authorization URL can get from `client.authorize_url` and the access token
can be retrieve in the callback procedure from `client.get_access_token(code)`,
where `code` is the access grant code.

### Settings for Django and Flask

- `NEXAAS_ID_CLIENT_ID`: the application token
- `NEXAAS_ID_CLIENT_SECRET`: the application secret
- `NEXAAS_ID_HOST`: the Nexaas ID host
- `NEXAAS_ID_CLIENT_SCOPE`: the scope (can be `None`)

### Django

In Django you must include the following path to the main `urlpatterns`:

```python
path('oauth/', include('nexaas_id_client.support.django.urls'))
```

The views that requires authorized access must be decorated:

```python
from nexaas_id_client.support.django.decorators import authorization_required

@authorization_required
def index(request, api_client: 'nexaas_id_client.NexaasIDClient') -> 'django.http.request.HttpResponse':
...
```

Your view must expect an `api_client` as argument – see bellow. Anyway you can
retrieve de access token from the session, under the key `oauth_access_token`.

In order to logout, use the app route `signout`. The query string key
`next_url` inform where to redirect after sign out.

**Caution:** If the view returns falsy (`None`, `False`, `0`, `""`, et cetera),
the `authorization_required` decorator redirects to sign out URL.

### Flask

The Flask support supplies a blueprint capable of deal with Nexaas ID OAuth.

The use:

```python
from flask import Flask
from nexaas_id_client.support.flask import oauth


app = Flask(__name__)
app.register_blueprint(oauth, url_prefix='/oauth')
```

The decorator is similar to Django support:

```python
from nexaas_id_client.support.flask import authorization_required, oauth
...

@app.route('/')
@authorization_required
def index(api_client: 'nexaas_id_client.NexaasIDClient') -> 'flask.Response':
...
```

Your view must expect an `api_client` as argument – see bellow. Anyway you can
retrieve de access token from the session, under the key `oauth_access_token`.

In order to logout, use the blueprint route `signout`. The query string key
`next_url` inform where to redirect after sign out.

## API client

The API client is responsible for dealing with Nexaas ID API.

You can get it this way:

```python
api_client = NexaasIDClient.from_oauth(
client.get_access_token(code),
client=client,
)
```

Where `client` is the OAuth client and `code` is the access grant code.

But, if you are using a framework support, you don’t need to do it: views
decorated by `authorization_required` will receive an API client ready to use.

### Resource API

The API client attributes:

- `access_token: str` – the access token
- `refresh_token: str` – the refresh token
- `scope: str` – the allowed scope
- `token: OAuthToken` – a token wrapper
- `id: str` – the client id
- `secret: str` – the client secret
- `server: urllib.parse.ParseResult` – the Nexaas ID server
- `personal_info: PersonalInfo` – the user’s personal data
- `professional_info: ProfessionalInfo` – the user’s professional data
- `emails: Emails` – a dictionary containing user id and the its e-mails list
- `contacts: Contacts` – a dictionary containing user id and its phone numbers
and eventually other contacts
- `invite(email: str) -> Invitation` – invite another user to the current
application

The classes `PersonalInfo`, `ProfessionalInfo`, `Emails`, `Contacts` and
`Invitation` are built on demand metaprogrammatically, and have an `id`
attribute (`uuid.UUID`) at least.

Other attributes you may expect:

- `PersonalInfo`
- `full_name: str`
- `first_name: str`
- `last_name: str`
- `nickname: str`
- `email: str`
- `birth: datetime.date`
- `gender: str`
- `language: str`
- `picture: str`
- `timezone: str`
- `country: str`
- `city: str`
- `bio: str`

- `ProfessionalInfo`
- `profession: str`
- `company: str`
- `position: str`

- `Emails`
- `emails: List[str]`

- `Contacts`:
- `phone_numbers: List[str]`

- `Invitation`:
- `email` (invited user)
- `requester` (inviter id)

- `OAuthToken`:
- `access_token: str`
- `refresh_token: str`
- `expired_at: datetime.datetime`
- `scope: str`
- `expired: bool` (maybe not present)


Release files for nexaas-id-client 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for nexaas-id-client 1.0.1
File Interpreter ABI Platform
nexaas_id_client-1.0.1-py3-none-any.whl Python 3 none any Details

Release files / nexaas_id_client-1.0.1-py3-none-any.whl

Download URL nexaas_id_client-1.0.1-py3-none-any.whl
Size 11.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
232380f36a43139f788d8c0d48c0596ef4d60d60c44ef3fa54cb345567cd7812
BLAKE2b-256 checksum
How to use checksums
7241325af8921412eb2d8696208e64818c77af5ffe6ee8f75431848f763cd603
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.11.0 pkginfo/1.4.2 requests/2.19.1 setuptools/28.8.0 requests-toolbelt/0.8.0 tqdm/4.25.0 PyPy/6.0.0

Release history Release notifications | RSS feed

This release

1.0.1 This release

1 release file

1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page