py_webauthn

A WebAuthn Python module.

Github星跟踪图

PyWebAuthn

.. image:: https://img.shields.io/pypi/v/webauthn.svg
:target: https://pypi.python.org/pypi/webauthn
:alt: PyPI

.. image:: https://img.shields.io/badge/license-BSD-blue.svg
:target: https://raw.githubusercontent.com/duo-labs/py_webauthn/master/LICENSE
:alt: GitHub license

PyWebAuthn is a Python module which can be used to handle WebAuthn <https://www.w3.org/TR/webauthn/>_ registration and assertion. Currently, WebAuthn is supported in Firefox <https://www.mozilla.org/en-US/firefox/new/>\ , Chrome <https://www.google.com/chrome/>\ , and Edge <https://www.microsoft.com/en-us/windows/microsoft-edge>_.

Installation

pip install webauthn

Usage

Generating credential options, (to be passed to navigator.credentials.create\ ):

.. code-block:: python

make_credential_options = webauthn.WebAuthnMakeCredentialOptions(
challenge,
rp_name,
rp_id,
user_id,
username,
display_name,
icon_url)

Creating a WebAuthnUser object. Used during the assertion (login) process:

.. code-block:: python

webauthn_user = webauthn.WebAuthnUser(
user.id,
user.username,
user.display_name,
user.icon_url,
user.credential_id,
user.pub_key,
user.sign_count,
user.rp_id)

Generating assertion options, (to be passed to navigator.credentials.get\ ):

.. code-block:: python

webauthn_assertion_options = webauthn.WebAuthnAssertionOptions(
webauthn_user,
challenge)

Verifying a registration response, (result of navigator.credentials.create\ ):

.. code-block:: python

webauthn_registration_response = webauthn.WebAuthnRegistrationResponse(
RP_ID,
ORIGIN,
registration_response,
challenge,
trust_anchor_dir,
trusted_attestation_cert_required,
self_attestation_permitted,
none_attestation_permitted,
uv_required=False) # User Verification

try:
webauthn_credential = webauthn_registration_response.verify()
except Exception as e:
return jsonify({'fail': 'Registration failed. Error: {}'.format(e)})

Create User

Verifying an assertion response, (result of navigator.credentials.get\ ):

.. code-block:: python

webauthn_user = webauthn.WebAuthnUser(
user.ukey,
user.username,
user.display_name,
user.icon_url,
user.credential_id,
user.pub_key,
user.sign_count,
user.rp_id)

webauthn_assertion_response = webauthn.WebAuthnAssertionResponse(
webauthn_user,
assertion_response,
challenge,
origin,
uv_required=False) # User Verification

try:
sign_count = webauthn_assertion_response.verify()
except Exception as e:
return jsonify({'fail': 'Assertion failed. Error: {}'.format(e)})

Update counter.

user.sign_count = sign_count

Flask Demo

There is a Flask <http://flask.pocoo.org/>_ demo available in the flask_demo directory. Follow these steps to run the Flask web app:

#. cd flask_demo
#. pip install -r requirements.txt
#. python create_db.py
#. python app.py
#. Go to https://localhost:5000 <https://localhost:5000>_ in your web browser. Try registering and logging in with a compatible U2F or WebAuthn authenticator.
#. Profit?

Flask Demo (Docker)

To run the Flask <http://flask.pocoo.org/>_ demo with Docker <https://www.docker.com/>_\ :

#. Install Docker.
#. docker-compose up -d
#. Go to https://localhost:5000 <https://localhost:5000>_ in your web browser. Try registering and logging in with a compatible U2F or WebAuthn authenticator.

Unit Tests

To run the unit tests, use the following command:

python3 -m unittest tests/webauthn_test.py

Note

Currently, PyWebAuthn does not support performing the following verifications.

  • Token Binding ID <https://www.w3.org/TR/webauthn/#dom-collectedclientdata-tokenbindingid>_
  • Authenticator Extensions <https://www.w3.org/TR/webauthn/#dom-collectedclientdata-authenticatorextensions>_

主要指标

概览
名称与所有者duo-labs/py_webauthn
主编程语言Python
编程语言Python (语言数: 1)
平台
许可证BSD 3-Clause "New" or "Revised" License
所有者活动
创建于2017-11-10 18:02:28
推送于2025-07-04 17:01:39
最后一次提交2025-06-16 15:26:37
发布数45
最新版本名称v2.6.0 (发布于 )
第一版名称v0.1 (发布于 2018-03-05 12:59:09)
用户参与
星数1k
关注者数34
派生数179
提交数543
已启用问题?
问题数107
打开的问题数2
拉请求数97
打开的拉请求数3
关闭的拉请求数43
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?