Skip to content

Security

APIKeyCookieAuth

Bases: _BaseAPIKeyAuth

Flask-HTTPAuth's HTTPTokenAuth with some modifications to implement cookie APIKey authentication.

  • Add an authentication error handler that returns JSON response.
  • Expose the auth.current_user as a property.
  • Add a description attribute for OpenAPI Spec.
  • Add a name attribute for OpenAPI Spec.
  • Add a param_name attribute for API Key paramter.
  • Add the get_security_scheme method for OpenAPI Spec.

Examples:

from apiflask import APIFlask, APIKeyCookieAuth

app = APIFlask(__name__)
auth = APIKeyCookieAuth()
Source code in apiflask/security.py
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
class APIKeyCookieAuth(_BaseAPIKeyAuth):
    """Flask-HTTPAuth's HTTPTokenAuth with some modifications to implement cookie APIKey authentication.

    - Add an authentication error handler that returns JSON response.
    - Expose the `auth.current_user` as a property.
    - Add a `description` attribute for OpenAPI Spec.
    - Add a `name` attribute for OpenAPI Spec.
    - Add a `param_name` attribute for API Key paramter.
    - Add the `get_security_scheme` method for OpenAPI Spec.

    Examples:

    ```python
    from apiflask import APIFlask, APIKeyCookieAuth

    app = APIFlask(__name__)
    auth = APIKeyCookieAuth()
    ```
    """  # noqa: E501

    def __init__(
        self,
        name: str = 'ApiKeyAuth',
        scheme: str = 'ApiKey',
        realm: str | None = None,
        param_name: str | None = 'X-API-Key',
        description: str | None = None,
        security_scheme_name: str | None = None,
    ) -> None:
        """Initialize a `APIKeyCookieAuth` object.

        Arguments:
            name: The security scheme name, default to `ApiKeyAuth`.
            scheme: The authentication scheme used in the `WWW-Authenticate`
                header. defaults to `'ApiKey'`.
            realm: The realm used in the `WWW-Authenticate` header to indicate
                 a scope of protection, defaults to use `'Authentication Required'`.
            param_name: The name of API Key paramter. defaults to `'ApiKey'`.
            description: The description of the OpenAPI security scheme.
            security_scheme_name: The name of the OpenAPI security scheme,
                defaults to `ApiKeyAuth`.

        *Version added: 3.0.0*
        """
        super().__init__(
            name=name,
            scheme=scheme,
            realm=realm,
            param_name=param_name,
            description=description,
            security_scheme_name=security_scheme_name,
        )
        self._location = 'cookie'

    def is_compatible_auth(self, headers):
        return self.param_name in request.cookies

    def get_auth(self) -> Authorization:
        auth = Authorization('apiKey')
        auth.token = request.cookies.get(self.param_name, '')  # type: ignore
        return auth

__init__(name='ApiKeyAuth', scheme='ApiKey', realm=None, param_name='X-API-Key', description=None, security_scheme_name=None)

Initialize a APIKeyCookieAuth object.

Parameters:

Name Type Description Default
name str

The security scheme name, default to ApiKeyAuth.

'ApiKeyAuth'
scheme str

The authentication scheme used in the WWW-Authenticate header. defaults to 'ApiKey'.

'ApiKey'
realm str | None

The realm used in the WWW-Authenticate header to indicate a scope of protection, defaults to use 'Authentication Required'.

None
param_name str | None

The name of API Key paramter. defaults to 'ApiKey'.

'X-API-Key'
description str | None

The description of the OpenAPI security scheme.

None
security_scheme_name str | None

The name of the OpenAPI security scheme, defaults to ApiKeyAuth.

None

Version added: 3.0.0

Source code in apiflask/security.py
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
def __init__(
    self,
    name: str = 'ApiKeyAuth',
    scheme: str = 'ApiKey',
    realm: str | None = None,
    param_name: str | None = 'X-API-Key',
    description: str | None = None,
    security_scheme_name: str | None = None,
) -> None:
    """Initialize a `APIKeyCookieAuth` object.

    Arguments:
        name: The security scheme name, default to `ApiKeyAuth`.
        scheme: The authentication scheme used in the `WWW-Authenticate`
            header. defaults to `'ApiKey'`.
        realm: The realm used in the `WWW-Authenticate` header to indicate
             a scope of protection, defaults to use `'Authentication Required'`.
        param_name: The name of API Key paramter. defaults to `'ApiKey'`.
        description: The description of the OpenAPI security scheme.
        security_scheme_name: The name of the OpenAPI security scheme,
            defaults to `ApiKeyAuth`.

    *Version added: 3.0.0*
    """
    super().__init__(
        name=name,
        scheme=scheme,
        realm=realm,
        param_name=param_name,
        description=description,
        security_scheme_name=security_scheme_name,
    )
    self._location = 'cookie'

APIKeyHeaderAuth

Bases: _BaseAPIKeyAuth

Flask-HTTPAuth's HTTPTokenAuth with some modifications to implement header APIKey authentication.

  • Add an authentication error handler that returns JSON response.
  • Expose the auth.current_user as a property.
  • Add a description attribute for OpenAPI Spec.
  • Add a name attribute for OpenAPI Spec.
  • Add a param_name attribute for API Key paramter.
  • Add the get_security_scheme method for OpenAPI Spec.

Examples:

from apiflask import APIFlask, APIKeyHeaderAuth

app = APIFlask(__name__)
auth = APIKeyHeaderAuth()
Source code in apiflask/security.py
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
class APIKeyHeaderAuth(_BaseAPIKeyAuth):
    """Flask-HTTPAuth's HTTPTokenAuth with some modifications to implement header APIKey authentication.

    - Add an authentication error handler that returns JSON response.
    - Expose the `auth.current_user` as a property.
    - Add a `description` attribute for OpenAPI Spec.
    - Add a `name` attribute for OpenAPI Spec.
    - Add a `param_name` attribute for API Key paramter.
    - Add the `get_security_scheme` method for OpenAPI Spec.

    Examples:

    ```python
    from apiflask import APIFlask, APIKeyHeaderAuth

    app = APIFlask(__name__)
    auth = APIKeyHeaderAuth()
    ```
    """  # noqa: E501

    def __init__(
        self,
        name: str = 'ApiKeyAuth',
        scheme: str = 'ApiKey',
        realm: str | None = None,
        param_name: str | None = 'X-API-Key',
        description: str | None = None,
        security_scheme_name: str | None = None,
    ) -> None:
        """Initialize a `APIKeyHeaderAuth` object.

        Arguments:
            name: The security scheme name, default to `ApiKeyAuth`.
            scheme: The authentication scheme used in the `WWW-Authenticate`
                header. defaults to `'ApiKey'`.
            realm: The realm used in the `WWW-Authenticate` header to indicate
                 a scope of protection, defaults to use `'Authentication Required'`.
            param_name: The name of API Key paramter. defaults to `'Authorization'`.
            description: The description of the OpenAPI security scheme.
            security_scheme_name: The name of the OpenAPI security scheme,
                defaults to `ApiKeyAuth`.

        *Version added: 3.0.0*
        """
        super().__init__(
            name=name,
            scheme=scheme,
            realm=realm,
            param_name=param_name,
            description=description,
            security_scheme_name=security_scheme_name,
        )

__init__(name='ApiKeyAuth', scheme='ApiKey', realm=None, param_name='X-API-Key', description=None, security_scheme_name=None)

Initialize a APIKeyHeaderAuth object.

Parameters:

Name Type Description Default
name str

The security scheme name, default to ApiKeyAuth.

'ApiKeyAuth'
scheme str

The authentication scheme used in the WWW-Authenticate header. defaults to 'ApiKey'.

'ApiKey'
realm str | None

The realm used in the WWW-Authenticate header to indicate a scope of protection, defaults to use 'Authentication Required'.

None
param_name str | None

The name of API Key paramter. defaults to 'Authorization'.

'X-API-Key'
description str | None

The description of the OpenAPI security scheme.

None
security_scheme_name str | None

The name of the OpenAPI security scheme, defaults to ApiKeyAuth.

None

Version added: 3.0.0

Source code in apiflask/security.py
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
def __init__(
    self,
    name: str = 'ApiKeyAuth',
    scheme: str = 'ApiKey',
    realm: str | None = None,
    param_name: str | None = 'X-API-Key',
    description: str | None = None,
    security_scheme_name: str | None = None,
) -> None:
    """Initialize a `APIKeyHeaderAuth` object.

    Arguments:
        name: The security scheme name, default to `ApiKeyAuth`.
        scheme: The authentication scheme used in the `WWW-Authenticate`
            header. defaults to `'ApiKey'`.
        realm: The realm used in the `WWW-Authenticate` header to indicate
             a scope of protection, defaults to use `'Authentication Required'`.
        param_name: The name of API Key paramter. defaults to `'Authorization'`.
        description: The description of the OpenAPI security scheme.
        security_scheme_name: The name of the OpenAPI security scheme,
            defaults to `ApiKeyAuth`.

    *Version added: 3.0.0*
    """
    super().__init__(
        name=name,
        scheme=scheme,
        realm=realm,
        param_name=param_name,
        description=description,
        security_scheme_name=security_scheme_name,
    )

APIKeyQueryAuth

Bases: _BaseAPIKeyAuth

Flask-HTTPAuth's HTTPTokenAuth with some modifications to implement query parameter APIKey authentication.

  • Add an authentication error handler that returns JSON response.
  • Expose the auth.current_user as a property.
  • Add a description attribute for OpenAPI Spec.
  • Add a name attribute for OpenAPI Spec.
  • Add a param_name attribute for API Key paramter.
  • Add the get_security_scheme method for OpenAPI Spec.

Examples:

from apiflask import APIFlask, APIKeyQueryAuth

app = APIFlask(__name__)
auth = APIKeyQueryAuth()
Source code in apiflask/security.py
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
class APIKeyQueryAuth(_BaseAPIKeyAuth):
    """Flask-HTTPAuth's HTTPTokenAuth with some modifications to implement query parameter APIKey authentication.

    - Add an authentication error handler that returns JSON response.
    - Expose the `auth.current_user` as a property.
    - Add a `description` attribute for OpenAPI Spec.
    - Add a `name` attribute for OpenAPI Spec.
    - Add a `param_name` attribute for API Key paramter.
    - Add the `get_security_scheme` method for OpenAPI Spec.

    Examples:

    ```python
    from apiflask import APIFlask, APIKeyQueryAuth

    app = APIFlask(__name__)
    auth = APIKeyQueryAuth()
    ```
    """  # noqa: E501

    def __init__(
        self,
        name: str = 'ApiKeyAuth',
        scheme: str = 'ApiKey',
        realm: str | None = None,
        param_name: str | None = 'X-API-Key',
        description: str | None = None,
        security_scheme_name: str | None = None,
    ) -> None:
        """Initialize a `APIKeyQueryAuth` object.

        Arguments:
            name: The security scheme name, default to `ApiKeyAuth`.
            scheme: The authentication scheme used in the `WWW-Authenticate`
                header. defaults to `'ApiKey'`.
            realm: The realm used in the `WWW-Authenticate` header to indicate
                 a scope of protection, defaults to use `'Authentication Required'`.
            param_name: The name of API Key paramter. defaults to `'ApiKey'`.
            description: The description of the OpenAPI security scheme.
            security_scheme_name: The name of the OpenAPI security scheme,
                defaults to `ApiKeyAuth`.

        *Version added: 3.0.0*
        """
        super().__init__(
            name=name,
            scheme=scheme,
            realm=realm,
            param_name=param_name,
            description=description,
            security_scheme_name=security_scheme_name,
        )
        self._location = 'query'

    def is_compatible_auth(self, headers):
        return self.param_name in request.args

    def get_auth(self) -> Authorization:
        auth = Authorization('apiKey')
        auth.token = request.args.get(self.param_name, '')  # type: ignore
        return auth

__init__(name='ApiKeyAuth', scheme='ApiKey', realm=None, param_name='X-API-Key', description=None, security_scheme_name=None)

Initialize a APIKeyQueryAuth object.

Parameters:

Name Type Description Default
name str

The security scheme name, default to ApiKeyAuth.

'ApiKeyAuth'
scheme str

The authentication scheme used in the WWW-Authenticate header. defaults to 'ApiKey'.

'ApiKey'
realm str | None

The realm used in the WWW-Authenticate header to indicate a scope of protection, defaults to use 'Authentication Required'.

None
param_name str | None

The name of API Key paramter. defaults to 'ApiKey'.

'X-API-Key'
description str | None

The description of the OpenAPI security scheme.

None
security_scheme_name str | None

The name of the OpenAPI security scheme, defaults to ApiKeyAuth.

None

Version added: 3.0.0

Source code in apiflask/security.py
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
def __init__(
    self,
    name: str = 'ApiKeyAuth',
    scheme: str = 'ApiKey',
    realm: str | None = None,
    param_name: str | None = 'X-API-Key',
    description: str | None = None,
    security_scheme_name: str | None = None,
) -> None:
    """Initialize a `APIKeyQueryAuth` object.

    Arguments:
        name: The security scheme name, default to `ApiKeyAuth`.
        scheme: The authentication scheme used in the `WWW-Authenticate`
            header. defaults to `'ApiKey'`.
        realm: The realm used in the `WWW-Authenticate` header to indicate
             a scope of protection, defaults to use `'Authentication Required'`.
        param_name: The name of API Key paramter. defaults to `'ApiKey'`.
        description: The description of the OpenAPI security scheme.
        security_scheme_name: The name of the OpenAPI security scheme,
            defaults to `ApiKeyAuth`.

    *Version added: 3.0.0*
    """
    super().__init__(
        name=name,
        scheme=scheme,
        realm=realm,
        param_name=param_name,
        description=description,
        security_scheme_name=security_scheme_name,
    )
    self._location = 'query'

HTTPBasicAuth

Bases: _AuthBase, HTTPBasicAuth, SecurityScheme

Flask-HTTPAuth's HTTPBasicAuth with some modifications.

  • Add an authentication error handler that returns JSON response.
  • Expose the auth.current_user as a property.
  • Add a description attribute for OpenAPI Spec.
  • Add a name attribute for OpenAPI Spec.
  • Add the get_security_scheme method for OpenAPI Spec.

Examples:

from apiflask import APIFlask, HTTPBasicAuth

app = APIFlask(__name__)
auth = HTTPBasicAuth()

Version changed: 3.0.0

  • Add parameter name.

Version changed: 1.3.0

  • Add security_scheme_name parameter.
Source code in apiflask/security.py
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
class HTTPBasicAuth(_AuthBase, BaseHTTPBasicAuth, SecurityScheme):
    """Flask-HTTPAuth's HTTPBasicAuth with some modifications.

    - Add an authentication error handler that returns JSON response.
    - Expose the `auth.current_user` as a property.
    - Add a `description` attribute for OpenAPI Spec.
    - Add a `name` attribute for OpenAPI Spec.
    - Add the `get_security_scheme` method for OpenAPI Spec.

    Examples:

    ```python
    from apiflask import APIFlask, HTTPBasicAuth

    app = APIFlask(__name__)
    auth = HTTPBasicAuth()
    ```

    *Version changed: 3.0.0*

    - Add parameter `name`.

    *Version changed: 1.3.0*

    - Add `security_scheme_name` parameter.
    """

    def __init__(
        self,
        name: str = 'BasicAuth',
        scheme: str = 'Basic',
        realm: str | None = None,
        description: str | None = None,
        security_scheme_name: str | None = None,
    ) -> None:
        """Initialize an `HTTPBasicAuth` object.

        Arguments:
            name: The security scheme name, default to `BasicAuth`.
            scheme: The authentication scheme used in the `WWW-Authenticate`
                header. Defaults to `'Basic'`.
            realm: The realm used in the `WWW-Authenticate` header to indicate
                a scope of protection, defaults to use `'Authentication Required'`.
            description: The description of the OpenAPI security scheme.
            security_scheme_name: The name of the OpenAPI security scheme, default to `BasicAuth`.
        """
        BaseHTTPBasicAuth.__init__(self, scheme=scheme, realm=realm)
        super().__init__(description=description, security_scheme_name=security_scheme_name)
        self.name = security_scheme_name or name

    def get_security_scheme(self) -> dict[str, t.Any]:
        security_scheme = {
            'type': 'http',
            'scheme': 'basic',
        }

        if self.description is not None:
            security_scheme['description'] = self.description

        return security_scheme

__init__(name='BasicAuth', scheme='Basic', realm=None, description=None, security_scheme_name=None)

Initialize an HTTPBasicAuth object.

Parameters:

Name Type Description Default
name str

The security scheme name, default to BasicAuth.

'BasicAuth'
scheme str

The authentication scheme used in the WWW-Authenticate header. Defaults to 'Basic'.

'Basic'
realm str | None

The realm used in the WWW-Authenticate header to indicate a scope of protection, defaults to use 'Authentication Required'.

None
description str | None

The description of the OpenAPI security scheme.

None
security_scheme_name str | None

The name of the OpenAPI security scheme, default to BasicAuth.

None
Source code in apiflask/security.py
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
def __init__(
    self,
    name: str = 'BasicAuth',
    scheme: str = 'Basic',
    realm: str | None = None,
    description: str | None = None,
    security_scheme_name: str | None = None,
) -> None:
    """Initialize an `HTTPBasicAuth` object.

    Arguments:
        name: The security scheme name, default to `BasicAuth`.
        scheme: The authentication scheme used in the `WWW-Authenticate`
            header. Defaults to `'Basic'`.
        realm: The realm used in the `WWW-Authenticate` header to indicate
            a scope of protection, defaults to use `'Authentication Required'`.
        description: The description of the OpenAPI security scheme.
        security_scheme_name: The name of the OpenAPI security scheme, default to `BasicAuth`.
    """
    BaseHTTPBasicAuth.__init__(self, scheme=scheme, realm=realm)
    super().__init__(description=description, security_scheme_name=security_scheme_name)
    self.name = security_scheme_name or name

HTTPTokenAuth

Bases: _AuthBase, HTTPTokenAuth, SecurityScheme

Flask-HTTPAuth's HTTPTokenAuth with some modifications.

  • Add an authentication error handler that returns JSON response.
  • Expose the auth.current_user as a property.
  • Add a description attribute for OpenAPI Spec.
  • Add a name attribute for OpenAPI Spec.
  • Add the get_security_scheme method for OpenAPI Spec.

Examples:

from apiflask import APIFlask, HTTPTokenAuth

app = APIFlask(__name__)
auth = HTTPTokenAuth()
Source code in apiflask/security.py
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
class HTTPTokenAuth(_AuthBase, BaseHTTPTokenAuth, SecurityScheme):
    """Flask-HTTPAuth's HTTPTokenAuth with some modifications.

    - Add an authentication error handler that returns JSON response.
    - Expose the `auth.current_user` as a property.
    - Add a `description` attribute for OpenAPI Spec.
    - Add a `name` attribute for OpenAPI Spec.
    - Add the `get_security_scheme` method for OpenAPI Spec.

    Examples:

    ```python
    from apiflask import APIFlask, HTTPTokenAuth

    app = APIFlask(__name__)
    auth = HTTPTokenAuth()
    ```
    """

    def __init__(
        self,
        scheme: str = 'Bearer',
        name: str = 'BearerAuth',
        realm: str | None = None,
        header: str | None = None,
        description: str | None = None,
        security_scheme_name: str | None = None,
    ) -> None:
        """Initialize a `HTTPTokenAuth` object.

        Arguments:
            scheme: The authentication scheme used in the `WWW-Authenticate`
                header. One of `'Bearer'` and `'ApiKey'`, defaults to `'Bearer'`.
            name: The security scheme name, default to `BearerAuth`.
            realm: The realm used in the `WWW-Authenticate` header to indicate
                 a scope of protection, defaults to use `'Authentication Required'`.
            header: The custom header where to obtain the token (instead
                of from `Authorization` header). If a custom header is used,
                the scheme should not be included. Example:

                ```
                X-API-Key: this-is-my-token
                ```

            description: The description of the OpenAPI security scheme.
            security_scheme_name: The name of the OpenAPI security scheme,
                defaults to `BearerAuth` or `ApiKeyAuth`.

        *Version changed: 3.0.0*

        - Add parameter `name`.

        *Version changed: 1.3.0*

        - Add `security_scheme_name` parameter.
        """
        BaseHTTPTokenAuth.__init__(self, scheme=scheme, realm=realm, header=header)
        super().__init__(description=description, security_scheme_name=security_scheme_name)
        if not self.scheme.lower() == 'bearer' or self.header is not None:
            name = 'ApiKeyAuth'
            warnings.warn(
                'The API key authorization by HTTPTokenAuth is deprecated and will be removed in '
                'APIFlask 4.0.0. Use '
                'APIKeyHeaderAuth, APIKeyCookieAuth, or APIKeyQueryAuth instead.',
                DeprecationWarning,
                stacklevel=2,
            )

        self.name = security_scheme_name or name

    def get_security_scheme(self) -> dict[str, t.Any]:
        if not self.scheme.lower() == 'bearer' or self.header is not None:
            security_scheme = {
                'type': 'apiKey',
                'name': self.header,
                'in': 'header',
            }
        else:
            security_scheme = {
                'type': 'http',
                'scheme': 'bearer',
            }

        if self.description is not None:
            security_scheme['description'] = self.description

        return security_scheme

__init__(scheme='Bearer', name='BearerAuth', realm=None, header=None, description=None, security_scheme_name=None)

Initialize a HTTPTokenAuth object.

Parameters:

Name Type Description Default
scheme str

The authentication scheme used in the WWW-Authenticate header. One of 'Bearer' and 'ApiKey', defaults to 'Bearer'.

'Bearer'
name str

The security scheme name, default to BearerAuth.

'BearerAuth'
realm str | None

The realm used in the WWW-Authenticate header to indicate a scope of protection, defaults to use 'Authentication Required'.

None
header str | None

The custom header where to obtain the token (instead of from Authorization header). If a custom header is used, the scheme should not be included. Example:

X-API-Key: this-is-my-token
None
description str | None

The description of the OpenAPI security scheme.

None
security_scheme_name str | None

The name of the OpenAPI security scheme, defaults to BearerAuth or ApiKeyAuth.

None

Version changed: 3.0.0

  • Add parameter name.

Version changed: 1.3.0

  • Add security_scheme_name parameter.
Source code in apiflask/security.py
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
def __init__(
    self,
    scheme: str = 'Bearer',
    name: str = 'BearerAuth',
    realm: str | None = None,
    header: str | None = None,
    description: str | None = None,
    security_scheme_name: str | None = None,
) -> None:
    """Initialize a `HTTPTokenAuth` object.

    Arguments:
        scheme: The authentication scheme used in the `WWW-Authenticate`
            header. One of `'Bearer'` and `'ApiKey'`, defaults to `'Bearer'`.
        name: The security scheme name, default to `BearerAuth`.
        realm: The realm used in the `WWW-Authenticate` header to indicate
             a scope of protection, defaults to use `'Authentication Required'`.
        header: The custom header where to obtain the token (instead
            of from `Authorization` header). If a custom header is used,
            the scheme should not be included. Example:

            ```
            X-API-Key: this-is-my-token
            ```

        description: The description of the OpenAPI security scheme.
        security_scheme_name: The name of the OpenAPI security scheme,
            defaults to `BearerAuth` or `ApiKeyAuth`.

    *Version changed: 3.0.0*

    - Add parameter `name`.

    *Version changed: 1.3.0*

    - Add `security_scheme_name` parameter.
    """
    BaseHTTPTokenAuth.__init__(self, scheme=scheme, realm=realm, header=header)
    super().__init__(description=description, security_scheme_name=security_scheme_name)
    if not self.scheme.lower() == 'bearer' or self.header is not None:
        name = 'ApiKeyAuth'
        warnings.warn(
            'The API key authorization by HTTPTokenAuth is deprecated and will be removed in '
            'APIFlask 4.0.0. Use '
            'APIKeyHeaderAuth, APIKeyCookieAuth, or APIKeyQueryAuth instead.',
            DeprecationWarning,
            stacklevel=2,
        )

    self.name = security_scheme_name or name

MultiAuth

Bases: MultiAuth

Flask-HTTPAuth's HTTPMultiAuth with some modifications.

  • Expose the auth.current_user as a property.

Examples:

from apiflask import APIFlask, HTTPBasicAuth, HTTPTokenAuth, MultiAuth

app = APIFlask(__name__)
basic_auth = HTTPBasicAuth()
token_auth = HTTPTokenAuth()
multi_auth = MultiAuth(basic_auth, token_auth)

Version added: 3.0.0

Source code in apiflask/security.py
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
class MultiAuth(BaseMultiAuth):
    """Flask-HTTPAuth's HTTPMultiAuth with some modifications.

    - Expose the `auth.current_user` as a property.

    Examples:

    ```python
    from apiflask import APIFlask, HTTPBasicAuth, HTTPTokenAuth, MultiAuth

    app = APIFlask(__name__)
    basic_auth = HTTPBasicAuth()
    token_auth = HTTPTokenAuth()
    multi_auth = MultiAuth(basic_auth, token_auth)
    ```

    *Version added: 3.0.0*
    """

    def __init__(self, main_auth: HTTPAuthType, *additional_auth: tuple[HTTPAuthType]):
        """Initialize a `HTTPMultiAuth` object.

        Arguments:
            main_auth: The main authentication object.
            additional_auth: The additional additional objects.
        """
        super().__init__(main_auth, *additional_auth)

    @property
    def current_user(self) -> None | t.Any:
        return g.get('flask_httpauth_user', None)

    @property
    def _auths(self) -> list[HTTPAuthType]:
        return [self.main_auth] + list(self.additional_auth)

__init__(main_auth, *additional_auth)

Initialize a HTTPMultiAuth object.

Parameters:

Name Type Description Default
main_auth HTTPAuthType

The main authentication object.

required
additional_auth tuple[HTTPAuthType]

The additional additional objects.

()
Source code in apiflask/security.py
465
466
467
468
469
470
471
472
def __init__(self, main_auth: HTTPAuthType, *additional_auth: tuple[HTTPAuthType]):
    """Initialize a `HTTPMultiAuth` object.

    Arguments:
        main_auth: The main authentication object.
        additional_auth: The additional additional objects.
    """
    super().__init__(main_auth, *additional_auth)

External documentation

See Flask-HTTPAuth's API docs for the full usage of the following classes: