PassaporteWeb connection for Flask applications
Project description
.. _Flask: http://flask.pocoo.org/docs/
.. _PassaporteWeb: https://app.passaporteweb.com.br/
====================
Flask-IdentityClient
====================
API de conexão com PassaporteWeb_ para aplicações Flask_.
Configurações
-------------
Os *settings* do Flask precisam conter as seguntes chaves:
- ``PASSAPORTE_WEB``: dicionário contendo as chaves:
- ``HOST``: prefixo do PassaporteWeb, incluindo protocolo. Ex.:
``https://app.passaporteweb.com.br``.
- ``FETCH_USER_DATA_PATH``: *path* da URL de captura de dados do
usuário. Ex.: ``/sso/fetchuserdata/``.
- ``REQUEST_TOKEN_PATH``: *path* da URL para inicialização da
requisição de *token*. Ex.: ``/sso/initiate/``.
- ``ACCESS_TOKEN_PATH``: *path* da URL de troca de *token*. Ex.:
``/sso/token/``.
- ``AUTHORIZATION_PATH``: *path* da URL de autorização. Ex.:
``/sso/authorize/``.
- ``SCOPE``: escopo OAuth, padrão: ``auth:api``.
- ``CONSUMER_TOKEN`` e ``CONSUMER_SECRET``: credenciais de autenticação
do consumidor.
- ``ECOMMERCE_URL`` (opcional): URL da aplicação no Ecommerce.
Sinais
------
Flask-IdentityClient oferece o sinal
``flask_identity_client.signal.update_service_account``, que precisa ser
conectado a um *handler* com assinatura ``(sender, user_data)`` para
efetuar as atualizações do *model* equivalente a ``ServiceAccount`` do
PassaporteWeb.
A lista de contas do usuário enviada pelo PassaporteWeb encontra-se na
chave ``accounts`` de ``user_data`` e pode ser modificada. Um lista com
os UUIDs das contas que permanecerem na chave após processamento dos
*handlers* será adicionada à chave ``accounts`` do dicionário
``user_data`` na sessão, que contém outras chaves importantes, como
``uuid``, ``email``, ``first_name``, ``last_name`` e ``full_name`` do
usuário (*identity*) autenticado.
*Blueprint*
-----------
O *blueprint* do Flask-IdentityClient pode ser encontrado em
``flask_identity_client.application`` e é chamado ``blueprint``.
Você pode registrá-lo::
from flask_identity_client.application import blueprint
app.register_blueprint(blueprint, url_prefix='/sso')
Autenticação de usuário
-----------------------
Para registrar um outro *blueprint* para requerer usuário, você deve
usar::
from flask_identity_client.startup_funcs import user_required
# blueprint aqui é o blueprint alvo, não flask_identity_client!
blueprint.before_request(user_required)
Obtendo recursos de um serviço atravessador
-------------------------------------------
É possível obter recursos de um serviço atravessador através do *factory*
de funções *startup* ``flask_identity_client.startup_funcs.resources_from_middle``.
O *factory* recebe como parâmetro a chave do dicionário de configurações
no *config* da aplicação. O dicionário deve ter as seguintes informações:
- ``TOKEN``: *token* de acesso ao serviço atravessador.
- ``SECRET``: chave secreta associada ao *token*.
- ``HOST``: serviço atravessador, incluindo o protocolo (``http://`` ou
``https://``).
- ``PATH``: caminha na API do serviço atravessador que retorna os recursos.
O resultado é armazenado na sessão, referenciado pela chave ``resources``.
Caso ocorra algum erro, a chave existirá, mas o valor será ``None``.
O objeto de recursos na chave ``resources`` da sessão possui os seguintes
atributos:
- ``data``: dados recebidos.
- ``etag``: ETag da resposta, usado nas requisições seguintes.
- ``expires``: data de expiração da resposta da requisição em formato
Posix, usado para evitar requisições múltiplas.
Observação: é preciso estar logado no PassaporteWeb, pois o serviço
atravessador receberá os mesmos dados do *login*. Caso os dados de
*login* estejam desatualizados ou o usuário não esteja logado, o valor
de ``resources`` será ``werkzeug.exceptions.Unauthorized`` (a exceção
**não** será levantada), delegando para a aplicação a responsabilidade
sobre como lidar com isso.
A sugestão é redirecionar o cliente para o processo de *login*::
if session['resources'] is Unauthorized:
session.clear()
return redirect(url_for('identity_client.login', next=request.url))
CHANGELOG
=========
Até versão 0.4.2, a atualização era realizada passando para a biblioteca
o caminho para encontrar o *model* ``ServiceAccount``, na chave
``SERVICE_ACCOUNT`` dos *settings*.
A partir da versão 0.5, Flask-IdentityClient não precisa mais conhecer
detalhes de implementação da aplicação. Para atualizar a base local,
basta conectar um *handler* ao sinal
``flask_identity_client.signal.update_service_account``, conforme
descrito acima.
Porém, **é necessário** atualizar o comportamento das aplicações
antigas, que não serão mais compatíveis com as novas versões de
Flask-IdentityClient.
.. _PassaporteWeb: https://app.passaporteweb.com.br/
====================
Flask-IdentityClient
====================
API de conexão com PassaporteWeb_ para aplicações Flask_.
Configurações
-------------
Os *settings* do Flask precisam conter as seguntes chaves:
- ``PASSAPORTE_WEB``: dicionário contendo as chaves:
- ``HOST``: prefixo do PassaporteWeb, incluindo protocolo. Ex.:
``https://app.passaporteweb.com.br``.
- ``FETCH_USER_DATA_PATH``: *path* da URL de captura de dados do
usuário. Ex.: ``/sso/fetchuserdata/``.
- ``REQUEST_TOKEN_PATH``: *path* da URL para inicialização da
requisição de *token*. Ex.: ``/sso/initiate/``.
- ``ACCESS_TOKEN_PATH``: *path* da URL de troca de *token*. Ex.:
``/sso/token/``.
- ``AUTHORIZATION_PATH``: *path* da URL de autorização. Ex.:
``/sso/authorize/``.
- ``SCOPE``: escopo OAuth, padrão: ``auth:api``.
- ``CONSUMER_TOKEN`` e ``CONSUMER_SECRET``: credenciais de autenticação
do consumidor.
- ``ECOMMERCE_URL`` (opcional): URL da aplicação no Ecommerce.
Sinais
------
Flask-IdentityClient oferece o sinal
``flask_identity_client.signal.update_service_account``, que precisa ser
conectado a um *handler* com assinatura ``(sender, user_data)`` para
efetuar as atualizações do *model* equivalente a ``ServiceAccount`` do
PassaporteWeb.
A lista de contas do usuário enviada pelo PassaporteWeb encontra-se na
chave ``accounts`` de ``user_data`` e pode ser modificada. Um lista com
os UUIDs das contas que permanecerem na chave após processamento dos
*handlers* será adicionada à chave ``accounts`` do dicionário
``user_data`` na sessão, que contém outras chaves importantes, como
``uuid``, ``email``, ``first_name``, ``last_name`` e ``full_name`` do
usuário (*identity*) autenticado.
*Blueprint*
-----------
O *blueprint* do Flask-IdentityClient pode ser encontrado em
``flask_identity_client.application`` e é chamado ``blueprint``.
Você pode registrá-lo::
from flask_identity_client.application import blueprint
app.register_blueprint(blueprint, url_prefix='/sso')
Autenticação de usuário
-----------------------
Para registrar um outro *blueprint* para requerer usuário, você deve
usar::
from flask_identity_client.startup_funcs import user_required
# blueprint aqui é o blueprint alvo, não flask_identity_client!
blueprint.before_request(user_required)
Obtendo recursos de um serviço atravessador
-------------------------------------------
É possível obter recursos de um serviço atravessador através do *factory*
de funções *startup* ``flask_identity_client.startup_funcs.resources_from_middle``.
O *factory* recebe como parâmetro a chave do dicionário de configurações
no *config* da aplicação. O dicionário deve ter as seguintes informações:
- ``TOKEN``: *token* de acesso ao serviço atravessador.
- ``SECRET``: chave secreta associada ao *token*.
- ``HOST``: serviço atravessador, incluindo o protocolo (``http://`` ou
``https://``).
- ``PATH``: caminha na API do serviço atravessador que retorna os recursos.
O resultado é armazenado na sessão, referenciado pela chave ``resources``.
Caso ocorra algum erro, a chave existirá, mas o valor será ``None``.
O objeto de recursos na chave ``resources`` da sessão possui os seguintes
atributos:
- ``data``: dados recebidos.
- ``etag``: ETag da resposta, usado nas requisições seguintes.
- ``expires``: data de expiração da resposta da requisição em formato
Posix, usado para evitar requisições múltiplas.
Observação: é preciso estar logado no PassaporteWeb, pois o serviço
atravessador receberá os mesmos dados do *login*. Caso os dados de
*login* estejam desatualizados ou o usuário não esteja logado, o valor
de ``resources`` será ``werkzeug.exceptions.Unauthorized`` (a exceção
**não** será levantada), delegando para a aplicação a responsabilidade
sobre como lidar com isso.
A sugestão é redirecionar o cliente para o processo de *login*::
if session['resources'] is Unauthorized:
session.clear()
return redirect(url_for('identity_client.login', next=request.url))
CHANGELOG
=========
Até versão 0.4.2, a atualização era realizada passando para a biblioteca
o caminho para encontrar o *model* ``ServiceAccount``, na chave
``SERVICE_ACCOUNT`` dos *settings*.
A partir da versão 0.5, Flask-IdentityClient não precisa mais conhecer
detalhes de implementação da aplicação. Para atualizar a base local,
basta conectar um *handler* ao sinal
``flask_identity_client.signal.update_service_account``, conforme
descrito acima.
Porém, **é necessário** atualizar o comportamento das aplicações
antigas, que não serão mais compatíveis com as novas versões de
Flask-IdentityClient.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Close
Hashes for Flask-IdentityClient-0.5.2.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 843e9286207d8b8f347f90c021dc9da0506ed93c6b67531e0073bb2b9c8c6b74 |
|
MD5 | 7544c46475a43e88b2a06ff0e2b844f7 |
|
BLAKE2b-256 | 98a30d8442c76674e8fa348bd9dbbf11ba0747c5a1789e9b7d04840cfe5a3874 |