@toa.io/extensions.exposition 1.0.0-alpha.4 → 1.0.0-alpha.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/context.toa.yaml +2 -2
- package/components/identity.bans/manifest.toa.yaml +15 -7
- package/components/identity.bans/operations/transit.d.ts +14 -0
- package/components/identity.bans/operations/transit.js +11 -0
- package/components/identity.bans/operations/transit.js.map +1 -0
- package/components/identity.bans/operations/tsconfig.tsbuildinfo +1 -0
- package/components/identity.bans/source/transit.ts +21 -0
- package/components/identity.bans/tsconfig.json +9 -0
- package/components/identity.basic/manifest.toa.yaml +22 -9
- package/components/identity.basic/operations/authenticate.d.ts +5 -1
- package/components/identity.basic/operations/authenticate.js +5 -2
- package/components/identity.basic/operations/authenticate.js.map +1 -1
- package/components/identity.basic/operations/incept.d.ts +12 -0
- package/components/identity.basic/operations/incept.js +26 -0
- package/components/identity.basic/operations/incept.js.map +1 -0
- package/components/identity.basic/operations/transit.d.ts +4 -4
- package/components/identity.basic/operations/transit.js +5 -3
- package/components/identity.basic/operations/transit.js.map +1 -1
- package/components/identity.basic/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/types.d.ts +8 -4
- package/components/identity.basic/source/authenticate.ts +16 -5
- package/components/identity.basic/source/incept.ts +38 -0
- package/components/identity.basic/source/transit.ts +8 -6
- package/components/identity.basic/source/types.ts +8 -4
- package/components/identity.federation/manifest.toa.yaml +28 -22
- package/components/identity.federation/operations/authenticate.d.ts +2 -2
- package/components/identity.federation/operations/authenticate.js +3 -10
- package/components/identity.federation/operations/authenticate.js.map +1 -1
- package/components/identity.federation/operations/incept.d.ts +11 -0
- package/components/identity.federation/operations/{create.js → incept.js} +6 -7
- package/components/identity.federation/operations/incept.js.map +1 -0
- package/components/identity.federation/operations/lib/jwt.d.ts +4 -5
- package/components/identity.federation/operations/lib/jwt.js +3 -3
- package/components/identity.federation/operations/lib/jwt.js.map +1 -1
- package/components/identity.federation/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.federation/operations/types/configuration.d.ts +14 -0
- package/components/identity.federation/operations/types/configuration.js +3 -0
- package/components/identity.federation/operations/types/configuration.js.map +1 -0
- package/components/identity.federation/operations/{types.d.ts → types/context.d.ts} +13 -6
- package/components/identity.federation/operations/types/context.js +3 -0
- package/components/identity.federation/operations/types/context.js.map +1 -0
- package/components/identity.federation/operations/types/entity.d.ts +6 -0
- package/components/identity.federation/operations/{types.js → types/entity.js} +1 -1
- package/components/identity.federation/operations/types/entity.js.map +1 -0
- package/components/identity.federation/operations/types/index.d.ts +3 -0
- package/components/identity.federation/operations/types/index.js +20 -0
- package/components/identity.federation/operations/types/index.js.map +1 -0
- package/components/identity.federation/source/authenticate.ts +5 -18
- package/components/identity.federation/source/{create.ts → incept.ts} +10 -9
- package/components/identity.federation/source/lib/jwt.test.ts +2 -2
- package/components/identity.federation/source/lib/jwt.ts +7 -8
- package/components/identity.federation/source/types/configuration.ts +15 -0
- package/components/identity.federation/source/{types.ts → types/context.ts} +15 -5
- package/components/identity.federation/source/types/entity.ts +6 -0
- package/components/identity.federation/source/types/index.ts +3 -0
- package/components/identity.federation/tsconfig.json +2 -2
- package/components/identity.roles/manifest.toa.yaml +18 -6
- package/components/identity.roles/operations/grant.d.ts +10 -0
- package/components/identity.roles/operations/grant.js +21 -0
- package/components/identity.roles/operations/grant.js.map +1 -0
- package/components/identity.roles/operations/lib/Entity.d.ts +5 -0
- package/components/identity.roles/operations/lib/Entity.js +3 -0
- package/components/identity.roles/operations/lib/Entity.js.map +1 -0
- package/components/identity.roles/operations/list.d.ts +1 -4
- package/components/identity.roles/operations/list.js.map +1 -1
- package/components/identity.roles/operations/principal.d.ts +4 -6
- package/components/identity.roles/operations/principal.js +6 -1
- package/components/identity.roles/operations/principal.js.map +1 -1
- package/components/identity.roles/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.roles/source/grant.ts +32 -0
- package/components/identity.roles/source/lib/Entity.ts +5 -0
- package/components/identity.roles/source/list.ts +2 -4
- package/components/identity.roles/source/principal.ts +10 -8
- package/components/identity.tokens/manifest.toa.yaml +19 -5
- package/components/identity.tokens/operations/authenticate.d.ts +2 -2
- package/components/identity.tokens/operations/authenticate.js +10 -4
- package/components/identity.tokens/operations/authenticate.js.map +1 -1
- package/components/identity.tokens/operations/decrypt.js +1 -0
- package/components/identity.tokens/operations/decrypt.js.map +1 -1
- package/components/identity.tokens/operations/encrypt.js +5 -1
- package/components/identity.tokens/operations/encrypt.js.map +1 -1
- package/components/identity.tokens/operations/tsconfig.tsbuildinfo +1 -1
- package/components/identity.tokens/operations/types.d.ts +8 -2
- package/components/identity.tokens/receivers/identity.bans.created.js +3 -0
- package/components/identity.tokens/source/authenticate.test.ts +11 -4
- package/components/identity.tokens/source/authenticate.ts +12 -5
- package/components/identity.tokens/source/decrypt.test.ts +5 -3
- package/components/identity.tokens/source/decrypt.ts +9 -8
- package/components/identity.tokens/source/encrypt.test.ts +26 -2
- package/components/identity.tokens/source/encrypt.ts +5 -1
- package/components/identity.tokens/source/types.ts +9 -2
- package/components/octets.storage/manifest.toa.yaml +0 -7
- package/documentation/access.md +27 -16
- package/documentation/authorities.md +53 -0
- package/documentation/cache.md +8 -1
- package/documentation/components.md +47 -22
- package/documentation/identity.md +17 -22
- package/documentation/io.md +56 -0
- package/documentation/protocol.md +3 -0
- package/documentation/query.md +17 -11
- package/documentation/require.md +15 -0
- package/documentation/tree.md +22 -4
- package/documentation/vary.md +14 -14
- package/features/access.feature +89 -47
- package/features/annotation.feature +2 -0
- package/features/authorities.basic.feature +141 -0
- package/features/authorities.feature +32 -0
- package/features/authorities.federation.feature +99 -0
- package/features/authorities.tokens.feature +118 -0
- package/features/body.feature +4 -0
- package/features/cache.feature +112 -5
- package/features/cors.feature +7 -2
- package/features/debug.feature +34 -0
- package/features/directives.feature +5 -0
- package/features/dynamic.feature +18 -7
- package/features/errors.feature +18 -4
- package/features/etag.feature +18 -1
- package/features/identity.bans.feature +137 -0
- package/features/identity.basic.feature +142 -19
- package/features/identity.feature +7 -2
- package/features/identity.federation.feature +67 -14
- package/features/identity.roles.feature +220 -4
- package/features/identity.tokens.feature +57 -4
- package/features/io.feature +205 -0
- package/features/octets.entries.feature +10 -0
- package/features/octets.feature +60 -64
- package/features/octets.meta.feature +7 -3
- package/features/octets.workflows.feature +14 -0
- package/features/probes.feature +14 -0
- package/features/{queries.feature → query.feature} +50 -3
- package/features/require.feature +67 -0
- package/features/response.feature +12 -3
- package/features/routes.feature +25 -12
- package/features/steps/Database.ts +17 -10
- package/features/steps/Gateway.ts +23 -6
- package/features/steps/IdP.ts +28 -23
- package/features/steps/components/echo/manifest.toa.yaml +5 -1
- package/features/steps/components/echo/operations/identity.js +7 -0
- package/features/steps/components/pots/manifest.toa.yaml +2 -0
- package/features/steps/components/users.properties/manifest.toa.yaml +2 -1
- package/features/streams.feature +1 -0
- package/features/timing.feature +27 -1
- package/features/vary.feature +105 -3
- package/package.json +12 -11
- package/readme.md +19 -14
- package/schemas/annotation.cos.yaml +1 -1
- package/schemas/io/input.cos.yaml +3 -0
- package/schemas/io/message.cos.yaml +5 -0
- package/schemas/io/output.cos.yaml +5 -0
- package/source/Annotation.ts +3 -3
- package/source/Context.ts +6 -4
- package/source/Directive.test.ts +4 -4
- package/source/Directive.ts +11 -38
- package/source/Endpoint.ts +43 -8
- package/source/Factory.ts +11 -7
- package/source/Gateway.ts +16 -44
- package/source/HTTP/Context.ts +24 -2
- package/source/HTTP/Server.ts +56 -43
- package/source/HTTP/exceptions.ts +7 -1
- package/source/HTTP/messages.ts +1 -1
- package/source/Mapping.ts +6 -1
- package/source/Query.test.ts +1 -1
- package/source/Query.ts +35 -24
- package/source/RTD/Context.ts +7 -10
- package/source/RTD/Directives.ts +28 -4
- package/source/RTD/Endpoint.ts +6 -4
- package/source/RTD/Match.ts +2 -7
- package/source/RTD/Method.ts +7 -13
- package/source/RTD/Node.ts +13 -14
- package/source/RTD/Tree.ts +17 -16
- package/source/RTD/factory.ts +3 -6
- package/source/Tenant.ts +0 -8
- package/source/deployment.ts +32 -22
- package/source/directives/auth/Authorization.ts +38 -19
- package/source/directives/auth/Delegate.ts +42 -0
- package/source/directives/auth/Incept.ts +3 -2
- package/source/directives/auth/Role.test.ts +53 -6
- package/source/directives/auth/Role.ts +22 -14
- package/source/directives/auth/types.ts +1 -1
- package/source/directives/cache/Cache.ts +15 -8
- package/source/directives/cache/Control.ts +42 -16
- package/source/directives/cors/CORS.ts +13 -7
- package/source/directives/dev/Development.ts +4 -4
- package/source/directives/index.ts +6 -4
- package/source/directives/io/Directive.ts +11 -0
- package/source/directives/io/IO.ts +43 -0
- package/source/directives/io/Input.ts +50 -0
- package/source/directives/io/Message.ts +1 -0
- package/source/directives/io/Output.ts +69 -0
- package/source/directives/io/index.ts +3 -0
- package/source/directives/io/schemas.ts +12 -0
- package/source/directives/octets/Context.ts +4 -3
- package/source/directives/octets/Delete.ts +4 -2
- package/source/directives/octets/Directive.ts +10 -0
- package/source/directives/octets/Fetch.ts +4 -3
- package/source/directives/octets/List.ts +4 -2
- package/source/directives/octets/Octets.ts +6 -8
- package/source/directives/octets/Store.ts +12 -4
- package/source/directives/octets/Workflow.ts +10 -3
- package/source/directives/octets/types.ts +0 -7
- package/source/directives/require/Directive.ts +5 -0
- package/source/directives/require/Headers.ts +20 -0
- package/source/directives/require/Require.ts +28 -0
- package/source/directives/require/index.ts +3 -0
- package/source/directives/vary/Directive.ts +2 -1
- package/source/directives/vary/Embed.ts +14 -8
- package/source/directives/vary/Vary.ts +7 -5
- package/source/directives/vary/embeddings/Authority.ts +8 -0
- package/source/directives/vary/embeddings/Embedding.ts +2 -1
- package/source/directives/vary/embeddings/Header.ts +8 -6
- package/source/directives/vary/embeddings/Language.ts +1 -1
- package/source/directives/vary/embeddings/Parameter.ts +14 -0
- package/source/directives/vary/embeddings/index.ts +6 -4
- package/source/exceptions.ts +22 -11
- package/source/root.ts +5 -0
- package/source/schemas.ts +1 -1
- package/transpiled/Annotation.d.ts +3 -3
- package/transpiled/Context.d.ts +6 -4
- package/transpiled/Directive.d.ts +4 -17
- package/transpiled/Directive.js +4 -7
- package/transpiled/Directive.js.map +1 -1
- package/transpiled/Endpoint.d.ts +5 -3
- package/transpiled/Endpoint.js +30 -5
- package/transpiled/Endpoint.js.map +1 -1
- package/transpiled/Factory.js +9 -4
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Gateway.d.ts +1 -4
- package/transpiled/Gateway.js +10 -26
- package/transpiled/Gateway.js.map +1 -1
- package/transpiled/HTTP/Context.d.ts +8 -1
- package/transpiled/HTTP/Context.js +15 -2
- package/transpiled/HTTP/Context.js.map +1 -1
- package/transpiled/HTTP/Server.d.ts +13 -2
- package/transpiled/HTTP/Server.js +41 -35
- package/transpiled/HTTP/Server.js.map +1 -1
- package/transpiled/HTTP/exceptions.d.ts +4 -1
- package/transpiled/HTTP/exceptions.js +7 -1
- package/transpiled/HTTP/exceptions.js.map +1 -1
- package/transpiled/HTTP/messages.js +1 -1
- package/transpiled/HTTP/messages.js.map +1 -1
- package/transpiled/Mapping.js +4 -1
- package/transpiled/Mapping.js.map +1 -1
- package/transpiled/Query.d.ts +1 -0
- package/transpiled/Query.js +21 -20
- package/transpiled/Query.js.map +1 -1
- package/transpiled/RTD/Context.d.ts +7 -6
- package/transpiled/RTD/Directives.d.ts +19 -4
- package/transpiled/RTD/Endpoint.d.ts +6 -4
- package/transpiled/RTD/Match.d.ts +2 -4
- package/transpiled/RTD/Method.d.ts +7 -7
- package/transpiled/RTD/Method.js.map +1 -1
- package/transpiled/RTD/Node.d.ts +4 -6
- package/transpiled/RTD/Node.js +2 -1
- package/transpiled/RTD/Node.js.map +1 -1
- package/transpiled/RTD/Tree.d.ts +6 -6
- package/transpiled/RTD/Tree.js +4 -1
- package/transpiled/RTD/Tree.js.map +1 -1
- package/transpiled/RTD/factory.d.ts +2 -4
- package/transpiled/RTD/factory.js +1 -1
- package/transpiled/RTD/factory.js.map +1 -1
- package/transpiled/Tenant.d.ts +0 -1
- package/transpiled/Tenant.js +0 -6
- package/transpiled/Tenant.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/deployment.js +28 -20
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/directives/auth/Authorization.d.ts +2 -3
- package/transpiled/directives/auth/Authorization.js +26 -12
- package/transpiled/directives/auth/Authorization.js.map +1 -1
- package/transpiled/directives/auth/Delegate.d.ts +10 -0
- package/transpiled/directives/auth/Delegate.js +34 -0
- package/transpiled/directives/auth/Delegate.js.map +1 -0
- package/transpiled/directives/auth/Incept.js +3 -2
- package/transpiled/directives/auth/Incept.js.map +1 -1
- package/transpiled/directives/auth/Role.d.ts +4 -1
- package/transpiled/directives/auth/Role.js +20 -14
- package/transpiled/directives/auth/Role.js.map +1 -1
- package/transpiled/directives/cache/Cache.d.ts +5 -5
- package/transpiled/directives/cache/Cache.js +10 -4
- package/transpiled/directives/cache/Cache.js.map +1 -1
- package/transpiled/directives/cache/Control.d.ts +2 -1
- package/transpiled/directives/cache/Control.js +29 -12
- package/transpiled/directives/cache/Control.js.map +1 -1
- package/transpiled/directives/cors/CORS.d.ts +2 -3
- package/transpiled/directives/cors/CORS.js +13 -7
- package/transpiled/directives/cors/CORS.js.map +1 -1
- package/transpiled/directives/dev/Development.d.ts +3 -3
- package/transpiled/directives/dev/Development.js +1 -1
- package/transpiled/directives/dev/Development.js.map +1 -1
- package/transpiled/directives/index.d.ts +2 -2
- package/transpiled/directives/index.js +5 -3
- package/transpiled/directives/index.js.map +1 -1
- package/transpiled/directives/io/Directive.d.ts +8 -0
- package/transpiled/directives/io/Directive.js +3 -0
- package/transpiled/directives/io/Directive.js.map +1 -0
- package/transpiled/directives/io/IO.d.ts +9 -0
- package/transpiled/directives/io/IO.js +33 -0
- package/transpiled/directives/io/IO.js.map +1 -0
- package/transpiled/directives/io/Input.d.ts +11 -0
- package/transpiled/directives/{octets/Permute.js → io/Input.js} +33 -26
- package/transpiled/directives/io/Input.js.map +1 -0
- package/transpiled/directives/io/Message.d.ts +1 -0
- package/transpiled/directives/io/Message.js +3 -0
- package/transpiled/directives/io/Message.js.map +1 -0
- package/transpiled/directives/io/Output.d.ts +13 -0
- package/transpiled/directives/io/Output.js +76 -0
- package/transpiled/directives/io/Output.js.map +1 -0
- package/transpiled/directives/io/index.d.ts +2 -0
- package/transpiled/directives/io/index.js +6 -0
- package/transpiled/directives/io/index.js.map +1 -0
- package/transpiled/directives/io/schemas.d.ts +7 -0
- package/transpiled/directives/io/schemas.js +14 -0
- package/transpiled/directives/io/schemas.js.map +1 -0
- package/transpiled/directives/octets/Context.d.ts +3 -3
- package/transpiled/directives/octets/Context.js +4 -2
- package/transpiled/directives/octets/Context.js.map +1 -1
- package/transpiled/directives/octets/Delete.d.ts +3 -2
- package/transpiled/directives/octets/Delete.js +3 -1
- package/transpiled/directives/octets/Delete.js.map +1 -1
- package/transpiled/directives/octets/Directive.d.ts +8 -0
- package/transpiled/directives/octets/Directive.js +8 -0
- package/transpiled/directives/octets/Directive.js.map +1 -0
- package/transpiled/directives/octets/Fetch.d.ts +3 -2
- package/transpiled/directives/octets/Fetch.js +3 -1
- package/transpiled/directives/octets/Fetch.js.map +1 -1
- package/transpiled/directives/octets/List.d.ts +3 -2
- package/transpiled/directives/octets/List.js +3 -1
- package/transpiled/directives/octets/List.js.map +1 -1
- package/transpiled/directives/octets/Octets.d.ts +4 -4
- package/transpiled/directives/octets/Octets.js +2 -4
- package/transpiled/directives/octets/Octets.js.map +1 -1
- package/transpiled/directives/octets/Store.d.ts +3 -2
- package/transpiled/directives/octets/Store.js +10 -3
- package/transpiled/directives/octets/Store.js.map +1 -1
- package/transpiled/directives/octets/Workflow.d.ts +3 -2
- package/transpiled/directives/octets/Workflow.js +9 -2
- package/transpiled/directives/octets/Workflow.js.map +1 -1
- package/transpiled/directives/octets/types.d.ts +0 -5
- package/transpiled/directives/require/Directive.d.ts +4 -0
- package/transpiled/directives/require/Directive.js +3 -0
- package/transpiled/directives/require/Directive.js.map +1 -0
- package/transpiled/directives/require/Headers.d.ts +7 -0
- package/transpiled/directives/require/Headers.js +19 -0
- package/transpiled/directives/require/Headers.js.map +1 -0
- package/transpiled/directives/require/Require.d.ts +9 -0
- package/transpiled/directives/require/Require.js +27 -0
- package/transpiled/directives/require/Require.js.map +1 -0
- package/transpiled/directives/require/index.d.ts +2 -0
- package/transpiled/directives/require/index.js +6 -0
- package/transpiled/directives/require/index.js.map +1 -0
- package/transpiled/directives/vary/Directive.d.ts +2 -1
- package/transpiled/directives/vary/Embed.d.ts +2 -1
- package/transpiled/directives/vary/Embed.js +8 -6
- package/transpiled/directives/vary/Embed.js.map +1 -1
- package/transpiled/directives/vary/Vary.d.ts +3 -3
- package/transpiled/directives/vary/Vary.js +3 -3
- package/transpiled/directives/vary/Vary.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Authority.d.ts +5 -0
- package/transpiled/directives/vary/embeddings/Authority.js +10 -0
- package/transpiled/directives/vary/embeddings/Authority.js.map +1 -0
- package/transpiled/directives/vary/embeddings/Embedding.d.ts +2 -1
- package/transpiled/directives/vary/embeddings/Header.js +8 -6
- package/transpiled/directives/vary/embeddings/Header.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Language.js +1 -1
- package/transpiled/directives/vary/embeddings/Language.js.map +1 -1
- package/transpiled/directives/vary/embeddings/Parameter.d.ts +7 -0
- package/transpiled/directives/vary/embeddings/Parameter.js +14 -0
- package/transpiled/directives/vary/embeddings/Parameter.js.map +1 -0
- package/transpiled/directives/vary/embeddings/index.d.ts +2 -2
- package/transpiled/directives/vary/embeddings/index.js +8 -4
- package/transpiled/directives/vary/embeddings/index.js.map +1 -1
- package/transpiled/exceptions.d.ts +3 -2
- package/transpiled/exceptions.js +13 -7
- package/transpiled/exceptions.js.map +1 -1
- package/transpiled/root.js +5 -0
- package/transpiled/root.js.map +1 -1
- package/transpiled/schemas.d.ts +1 -1
- package/transpiled/schemas.js +2 -2
- package/transpiled/schemas.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/components/identity.basic/operations/create.d.ts +0 -10
- package/components/identity.basic/operations/create.js +0 -10
- package/components/identity.basic/operations/create.js.map +0 -1
- package/components/identity.basic/source/create.ts +0 -18
- package/components/identity.federation/operations/create.d.ts +0 -10
- package/components/identity.federation/operations/create.js.map +0 -1
- package/components/identity.federation/operations/schemas.d.ts +0 -59
- package/components/identity.federation/operations/schemas.js +0 -9
- package/components/identity.federation/operations/schemas.js.map +0 -1
- package/components/identity.federation/operations/types.js.map +0 -1
- package/components/identity.federation/source/schemas.ts +0 -61
- package/components/octets.storage/operations/permute.js +0 -7
- package/source/HTTP/Server.test.ts +0 -126
- package/source/directives/octets/Permute.ts +0 -43
- package/transpiled/directives/octets/Permute.d.ts +0 -10
- package/transpiled/directives/octets/Permute.js.map +0 -1
|
@@ -1,21 +1,21 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Identity Federation
|
|
2
3
|
|
|
3
4
|
Background:
|
|
4
5
|
Given the `identity.federation` database is empty
|
|
5
6
|
Given local IDP is running
|
|
6
7
|
|
|
7
|
-
|
|
8
8
|
Scenario: Getting identity for a new user
|
|
9
9
|
Given the `identity.federation` configuration:
|
|
10
10
|
"""yaml
|
|
11
|
-
explicit_identity_creation: false
|
|
12
11
|
trust:
|
|
13
|
-
-
|
|
12
|
+
- iss: http://localhost:44444
|
|
14
13
|
"""
|
|
15
14
|
And the IDP token for User is issued
|
|
16
15
|
When the following request is received:
|
|
17
16
|
"""
|
|
18
17
|
GET /identity/ HTTP/1.1
|
|
18
|
+
host: nex.toa.io
|
|
19
19
|
authorization: Bearer ${{ User.id_token }}
|
|
20
20
|
accept: application/yaml
|
|
21
21
|
content-type: application/yaml
|
|
@@ -27,39 +27,41 @@ Feature: Identity Federation
|
|
|
27
27
|
|
|
28
28
|
id: ${{ User.id }}
|
|
29
29
|
roles: []
|
|
30
|
-
scheme: bearer
|
|
31
30
|
"""
|
|
32
|
-
# validate
|
|
31
|
+
# validate TOKEN
|
|
33
32
|
When the following request is received:
|
|
34
33
|
"""
|
|
35
34
|
GET /identity/ HTTP/1.1
|
|
35
|
+
host: nex.toa.io
|
|
36
36
|
accept: application/yaml
|
|
37
37
|
authorization: Token ${{ User.token }}
|
|
38
38
|
"""
|
|
39
39
|
Then the following reply is sent:
|
|
40
40
|
"""
|
|
41
41
|
200 OK
|
|
42
|
+
|
|
42
43
|
id: ${{ User.id }}
|
|
43
44
|
"""
|
|
44
|
-
# ensuring identity
|
|
45
|
+
# ensuring identity idempotency
|
|
45
46
|
When the following request is received:
|
|
46
47
|
"""
|
|
47
48
|
GET /identity/ HTTP/1.1
|
|
49
|
+
host: nex.toa.io
|
|
48
50
|
authorization: Bearer ${{ User.id_token }}
|
|
49
51
|
accept: application/yaml
|
|
50
52
|
"""
|
|
51
53
|
Then the following reply is sent:
|
|
52
54
|
"""
|
|
53
55
|
200 OK
|
|
56
|
+
|
|
54
57
|
id: ${{ User.id }}
|
|
55
58
|
"""
|
|
56
59
|
|
|
57
60
|
Scenario: Getting identity for a user with symmetric tokens
|
|
58
61
|
Given the `identity.federation` configuration:
|
|
59
62
|
"""yaml
|
|
60
|
-
explicit_identity_creation: false
|
|
61
63
|
trust:
|
|
62
|
-
-
|
|
64
|
+
- iss: http://localhost:44444
|
|
63
65
|
secrets:
|
|
64
66
|
HS384:
|
|
65
67
|
k1: the-secret
|
|
@@ -71,6 +73,7 @@ Feature: Identity Federation
|
|
|
71
73
|
When the following request is received:
|
|
72
74
|
"""
|
|
73
75
|
GET /identity/ HTTP/1.1
|
|
76
|
+
host: nex.toa.io
|
|
74
77
|
authorization: Bearer ${{ GoodUser.id_token }}
|
|
75
78
|
accept: application/yaml
|
|
76
79
|
content-type: application/yaml
|
|
@@ -81,14 +84,13 @@ Feature: Identity Federation
|
|
|
81
84
|
authorization: Token ${{ GoodUser.token }}
|
|
82
85
|
|
|
83
86
|
id: ${{ GoodUser.id }}
|
|
84
|
-
scheme: bearer
|
|
85
87
|
"""
|
|
86
88
|
|
|
87
|
-
Scenario: Creating an Identity using inception
|
|
89
|
+
Scenario: Creating an Identity using inception
|
|
88
90
|
Given the `identity.federation` configuration:
|
|
89
91
|
"""yaml
|
|
90
92
|
trust:
|
|
91
|
-
-
|
|
93
|
+
- iss: http://localhost:44444
|
|
92
94
|
"""
|
|
93
95
|
Given the `users` is running with the following manifest:
|
|
94
96
|
"""yaml
|
|
@@ -96,7 +98,8 @@ Feature: Identity Federation
|
|
|
96
98
|
/:
|
|
97
99
|
anonymous: true
|
|
98
100
|
POST:
|
|
99
|
-
|
|
101
|
+
io:output: [id]
|
|
102
|
+
auth:incept: id
|
|
100
103
|
endpoint: create
|
|
101
104
|
"""
|
|
102
105
|
And the IDP token for Bill is issued
|
|
@@ -104,6 +107,7 @@ Feature: Identity Federation
|
|
|
104
107
|
# identity inception
|
|
105
108
|
"""
|
|
106
109
|
POST /users/ HTTP/1.1
|
|
110
|
+
host: nex.toa.io
|
|
107
111
|
authorization: Bearer ${{ Bill.id_token }}
|
|
108
112
|
accept: application/yaml
|
|
109
113
|
content-type: application/yaml
|
|
@@ -121,6 +125,7 @@ Feature: Identity Federation
|
|
|
121
125
|
When the following request is received:
|
|
122
126
|
"""
|
|
123
127
|
GET /identity/ HTTP/1.1
|
|
128
|
+
host: nex.toa.io
|
|
124
129
|
authorization: Token ${{ Bill.token }}
|
|
125
130
|
accept: application/yaml
|
|
126
131
|
"""
|
|
@@ -132,24 +137,72 @@ Feature: Identity Federation
|
|
|
132
137
|
When the following request is received:
|
|
133
138
|
"""
|
|
134
139
|
GET /identity/ HTTP/1.1
|
|
140
|
+
host: nex.toa.io
|
|
135
141
|
authorization: Bearer ${{ Bill.id_token }}
|
|
136
142
|
accept: application/yaml
|
|
137
143
|
"""
|
|
138
144
|
Then the following reply is sent:
|
|
139
145
|
"""
|
|
140
146
|
200 OK
|
|
147
|
+
|
|
141
148
|
id: ${{ Bill.id }}
|
|
142
149
|
"""
|
|
143
150
|
And the following request is received:
|
|
144
151
|
# same credentials
|
|
145
152
|
"""
|
|
146
153
|
POST /users/ HTTP/1.1
|
|
154
|
+
host: nex.toa.io
|
|
147
155
|
authorization: Bearer ${{ Bill.id_token }}
|
|
148
|
-
content-type:
|
|
156
|
+
content-type: application/yaml
|
|
149
157
|
|
|
150
158
|
name: Mary Louis
|
|
151
159
|
"""
|
|
152
160
|
Then the following reply is sent:
|
|
153
161
|
"""
|
|
154
|
-
|
|
162
|
+
409 Conflict
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
Scenario: Granting a `system` role to a Principal
|
|
166
|
+
Given the `identity.federation` configuration:
|
|
167
|
+
"""yaml
|
|
168
|
+
trust:
|
|
169
|
+
- iss: http://localhost:44444
|
|
170
|
+
principal:
|
|
171
|
+
iss: http://localhost:44444
|
|
172
|
+
sub: root-mock-id
|
|
173
|
+
"""
|
|
174
|
+
And the IDP token for root is issued
|
|
175
|
+
|
|
176
|
+
# create an identity
|
|
177
|
+
When the following request is received:
|
|
178
|
+
"""
|
|
179
|
+
GET /identity/ HTTP/1.1
|
|
180
|
+
host: nex.toa.io
|
|
181
|
+
authorization: Bearer ${{ root.id_token }}
|
|
182
|
+
accept: application/yaml
|
|
183
|
+
content-type: application/yaml
|
|
184
|
+
"""
|
|
185
|
+
Then the following reply is sent:
|
|
186
|
+
"""
|
|
187
|
+
200 OK
|
|
188
|
+
authorization: Token ${{ root.token }}
|
|
189
|
+
|
|
190
|
+
id: ${{ root.id }}
|
|
191
|
+
"""
|
|
192
|
+
|
|
193
|
+
# check the role
|
|
194
|
+
When the following request is received:
|
|
195
|
+
"""
|
|
196
|
+
GET /identity/ HTTP/1.1
|
|
197
|
+
host: nex.toa.io
|
|
198
|
+
accept: application/yaml
|
|
199
|
+
authorization: Token ${{ root.token }}
|
|
200
|
+
"""
|
|
201
|
+
Then the following reply is sent:
|
|
202
|
+
"""
|
|
203
|
+
200 OK
|
|
204
|
+
|
|
205
|
+
id: ${{ root.id }}
|
|
206
|
+
roles:
|
|
207
|
+
- system
|
|
155
208
|
"""
|
|
@@ -1,16 +1,20 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Roles management
|
|
2
3
|
|
|
3
|
-
Scenario:
|
|
4
|
+
Scenario: Granting a role to an Identity
|
|
5
|
+
# root:secret
|
|
6
|
+
# user:pass
|
|
4
7
|
Given the `identity.basic` database contains:
|
|
5
|
-
| _id | username | password |
|
|
6
|
-
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
7
|
-
| 4344518184ad44228baffce7a44fd0b1 | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
8
|
+
| _id | authority | username | password |
|
|
9
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
10
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | user | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
8
11
|
And the `identity.roles` database contains:
|
|
9
12
|
| _id | identity | role |
|
|
10
13
|
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
11
14
|
And the annotation:
|
|
12
15
|
"""yaml
|
|
13
16
|
/:
|
|
17
|
+
io:output: true
|
|
14
18
|
auth:role: test
|
|
15
19
|
GET:
|
|
16
20
|
dev:stub:
|
|
@@ -20,6 +24,7 @@ Feature: Roles management
|
|
|
20
24
|
# user doesn't have the required role
|
|
21
25
|
"""
|
|
22
26
|
GET / HTTP/1.1
|
|
27
|
+
host: nex.toa.io
|
|
23
28
|
authorization: Basic dXNlcjpwYXNz
|
|
24
29
|
"""
|
|
25
30
|
Then the following reply is sent:
|
|
@@ -30,7 +35,9 @@ Feature: Roles management
|
|
|
30
35
|
# root adds a role to a user
|
|
31
36
|
"""
|
|
32
37
|
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
38
|
+
host: nex.toa.io
|
|
33
39
|
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
40
|
+
accept: application/yaml
|
|
34
41
|
content-type: application/yaml
|
|
35
42
|
|
|
36
43
|
role: test
|
|
@@ -38,14 +45,223 @@ Feature: Roles management
|
|
|
38
45
|
Then the following reply is sent:
|
|
39
46
|
"""
|
|
40
47
|
201 Created
|
|
48
|
+
|
|
49
|
+
grantor: 72cf9b0ab0ac4ab2b8036e4e940ddcae
|
|
41
50
|
"""
|
|
42
51
|
When the following request is received:
|
|
43
52
|
# user now have the role
|
|
44
53
|
"""
|
|
45
54
|
GET / HTTP/1.1
|
|
55
|
+
host: nex.toa.io
|
|
46
56
|
authorization: Basic dXNlcjpwYXNz
|
|
47
57
|
"""
|
|
48
58
|
Then the following reply is sent:
|
|
49
59
|
"""
|
|
50
60
|
200 OK
|
|
51
61
|
"""
|
|
62
|
+
|
|
63
|
+
Scenario Outline: Delegating roles
|
|
64
|
+
# moderator:secret
|
|
65
|
+
# assistant:pass
|
|
66
|
+
Given the `identity.basic` database contains:
|
|
67
|
+
| _id | authority | username | password |
|
|
68
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
69
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
70
|
+
And the `identity.roles` database contains:
|
|
71
|
+
| _id | identity | role |
|
|
72
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
73
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
74
|
+
And the annotation:
|
|
75
|
+
"""yaml
|
|
76
|
+
/:
|
|
77
|
+
io:output: true
|
|
78
|
+
auth:role: app:moderation:photos
|
|
79
|
+
GET:
|
|
80
|
+
dev:stub:
|
|
81
|
+
access: granted!
|
|
82
|
+
"""
|
|
83
|
+
When the following request is received:
|
|
84
|
+
# assistant doesn't have the required role
|
|
85
|
+
"""
|
|
86
|
+
GET / HTTP/1.1
|
|
87
|
+
host: nex.toa.io
|
|
88
|
+
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
89
|
+
"""
|
|
90
|
+
Then the following reply is sent:
|
|
91
|
+
"""
|
|
92
|
+
403 Forbidden
|
|
93
|
+
"""
|
|
94
|
+
When the following request is received:
|
|
95
|
+
# moderator delegates a role to an assistant
|
|
96
|
+
"""
|
|
97
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
98
|
+
host: nex.toa.io
|
|
99
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
100
|
+
content-type: application/yaml
|
|
101
|
+
|
|
102
|
+
role: <role>
|
|
103
|
+
"""
|
|
104
|
+
Then the following reply is sent:
|
|
105
|
+
"""
|
|
106
|
+
201 Created
|
|
107
|
+
"""
|
|
108
|
+
When the following request is received:
|
|
109
|
+
# assistant has access
|
|
110
|
+
"""
|
|
111
|
+
GET / HTTP/1.1
|
|
112
|
+
host: nex.toa.io
|
|
113
|
+
authorization: Basic YXNzaXN0YW50OnBhc3M=
|
|
114
|
+
"""
|
|
115
|
+
Then the following reply is sent:
|
|
116
|
+
"""
|
|
117
|
+
200 OK
|
|
118
|
+
"""
|
|
119
|
+
Examples:
|
|
120
|
+
| role |
|
|
121
|
+
| app:moderation |
|
|
122
|
+
| app:moderation:photos |
|
|
123
|
+
|
|
124
|
+
Scenario: Delegating role out of own scope
|
|
125
|
+
Given the `identity.basic` database contains:
|
|
126
|
+
| _id | authority | username | password |
|
|
127
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
128
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
129
|
+
And the `identity.roles` database contains:
|
|
130
|
+
| _id | identity | role |
|
|
131
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles:delegation |
|
|
132
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
133
|
+
And the annotation:
|
|
134
|
+
"""yaml
|
|
135
|
+
/:
|
|
136
|
+
io:output: true
|
|
137
|
+
auth:role: app:moderation:photos
|
|
138
|
+
GET:
|
|
139
|
+
dev:stub:
|
|
140
|
+
access: granted!
|
|
141
|
+
"""
|
|
142
|
+
When the following request is received:
|
|
143
|
+
"""
|
|
144
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
145
|
+
host: nex.toa.io
|
|
146
|
+
accept: application/yaml
|
|
147
|
+
content-type: application/yaml
|
|
148
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
149
|
+
|
|
150
|
+
role: app:finance
|
|
151
|
+
"""
|
|
152
|
+
Then the following reply is sent:
|
|
153
|
+
"""
|
|
154
|
+
422 Unprocessable Entity
|
|
155
|
+
|
|
156
|
+
code: OUT_OF_SCOPE
|
|
157
|
+
"""
|
|
158
|
+
|
|
159
|
+
Scenario: Delegating role without `system:identity:roles:delegation` role
|
|
160
|
+
Given the `identity.basic` database contains:
|
|
161
|
+
| _id | authority | username | password |
|
|
162
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
163
|
+
| 4344518184ad44228baffce7a44fd0b1 | nex | assistant | $2b$10$JoiAQUS7tzobDAFIDBWhWeEIJv933dQetyjRzSmfQGaJE5ZlJbmYy |
|
|
164
|
+
And the `identity.roles` database contains:
|
|
165
|
+
| _id | identity | role |
|
|
166
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:moderation |
|
|
167
|
+
And the annotation:
|
|
168
|
+
"""yaml
|
|
169
|
+
/:
|
|
170
|
+
io:output: true
|
|
171
|
+
auth:role: app:moderation:photos
|
|
172
|
+
GET:
|
|
173
|
+
dev:stub:
|
|
174
|
+
access: granted!
|
|
175
|
+
"""
|
|
176
|
+
When the following request is received:
|
|
177
|
+
"""
|
|
178
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
179
|
+
host: nex.toa.io
|
|
180
|
+
content-type: application/yaml
|
|
181
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
182
|
+
|
|
183
|
+
role: app:moderation
|
|
184
|
+
"""
|
|
185
|
+
Then the following reply is sent:
|
|
186
|
+
"""
|
|
187
|
+
403 Forbidden
|
|
188
|
+
"""
|
|
189
|
+
|
|
190
|
+
Scenario Outline: Invalid role name
|
|
191
|
+
Given the `identity.basic` database contains:
|
|
192
|
+
| _id | authority | username | password |
|
|
193
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | root | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
194
|
+
And the `identity.roles` database contains:
|
|
195
|
+
| _id | identity | role |
|
|
196
|
+
| 9c4702490ff84f2a9e1b1da2ab64bdd4 | 72cf9b0ab0ac4ab2b8036e4e940ddcae | system:identity:roles |
|
|
197
|
+
When the following request is received:
|
|
198
|
+
# root adds a role to a user
|
|
199
|
+
"""
|
|
200
|
+
POST /identity/roles/4344518184ad44228baffce7a44fd0b1/ HTTP/1.1
|
|
201
|
+
host: nex.toa.io
|
|
202
|
+
authorization: Basic cm9vdDpzZWNyZXQ=
|
|
203
|
+
content-type: application/yaml
|
|
204
|
+
|
|
205
|
+
role: <role>
|
|
206
|
+
"""
|
|
207
|
+
Then the following reply is sent:
|
|
208
|
+
"""
|
|
209
|
+
400 Bad Request
|
|
210
|
+
"""
|
|
211
|
+
Examples:
|
|
212
|
+
| role |
|
|
213
|
+
| app! |
|
|
214
|
+
| app: |
|
|
215
|
+
| app:no spaces |
|
|
216
|
+
|
|
217
|
+
Scenario: Dynamic roles
|
|
218
|
+
Given the `identity.basic` database contains:
|
|
219
|
+
| _id | authority | username | password |
|
|
220
|
+
| 72cf9b0ab0ac4ab2b8036e4e940ddcae | nex | moderator | $2b$10$Qq/qnyyU5wjrbDXyWok14OnqAZv/z.pLhz.UddatjI6eHU/rFof4i |
|
|
221
|
+
And the `identity.roles` database contains:
|
|
222
|
+
| _id | identity | role |
|
|
223
|
+
| 30c969e05ff6437097ed5f07fc52358e | 72cf9b0ab0ac4ab2b8036e4e940ddcae | app:29e54ae1:moderation |
|
|
224
|
+
And the annotation:
|
|
225
|
+
"""yaml
|
|
226
|
+
/:
|
|
227
|
+
/broken:
|
|
228
|
+
auth:role: app:{org}:moderation
|
|
229
|
+
GET:
|
|
230
|
+
dev:stub: never
|
|
231
|
+
/:org:
|
|
232
|
+
io:output: true
|
|
233
|
+
auth:role: app:{org}:moderation
|
|
234
|
+
GET:
|
|
235
|
+
dev:stub:
|
|
236
|
+
access: granted!
|
|
237
|
+
"""
|
|
238
|
+
When the following request is received:
|
|
239
|
+
"""
|
|
240
|
+
GET /29e54ae1/ HTTP/1.1
|
|
241
|
+
host: nex.toa.io
|
|
242
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
243
|
+
"""
|
|
244
|
+
Then the following reply is sent:
|
|
245
|
+
"""
|
|
246
|
+
200 OK
|
|
247
|
+
"""
|
|
248
|
+
When the following request is received:
|
|
249
|
+
"""
|
|
250
|
+
GET /88584c9b/ HTTP/1.1
|
|
251
|
+
host: nex.toa.io
|
|
252
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
253
|
+
"""
|
|
254
|
+
Then the following reply is sent:
|
|
255
|
+
"""
|
|
256
|
+
403 Forbidden
|
|
257
|
+
"""
|
|
258
|
+
When the following request is received:
|
|
259
|
+
"""
|
|
260
|
+
GET /broken/ HTTP/1.1
|
|
261
|
+
host: nex.toa.io
|
|
262
|
+
authorization: Basic bW9kZXJhdG9yOnNlY3JldA==
|
|
263
|
+
"""
|
|
264
|
+
Then the following reply is sent:
|
|
265
|
+
"""
|
|
266
|
+
500 Internal Server Error
|
|
267
|
+
"""
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
+
@security
|
|
1
2
|
Feature: Tokens lifecycle
|
|
2
3
|
|
|
3
4
|
Scenario: Switching to Token authentication scheme
|
|
4
5
|
Given the `identity.basic` database contains:
|
|
5
|
-
| _id | username | password |
|
|
6
|
-
| efe3a65ebbee47ed95a73edd911ea328 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
6
|
+
| _id | authority | username | password |
|
|
7
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
7
8
|
Given the annotation:
|
|
8
9
|
"""yaml
|
|
9
10
|
/:
|
|
11
|
+
io:output: true
|
|
10
12
|
/hello/:id:
|
|
11
13
|
auth:id: id
|
|
12
14
|
GET:
|
|
@@ -15,6 +17,7 @@ Feature: Tokens lifecycle
|
|
|
15
17
|
When the following request is received:
|
|
16
18
|
"""
|
|
17
19
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
20
|
+
host: nex.toa.io
|
|
18
21
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
19
22
|
accept: text/plain
|
|
20
23
|
"""
|
|
@@ -35,6 +38,7 @@ Feature: Tokens lifecycle
|
|
|
35
38
|
And the annotation:
|
|
36
39
|
"""yaml
|
|
37
40
|
/:
|
|
41
|
+
io:output: true
|
|
38
42
|
/hello/:id:
|
|
39
43
|
auth:id: id
|
|
40
44
|
GET:
|
|
@@ -43,6 +47,7 @@ Feature: Tokens lifecycle
|
|
|
43
47
|
When the following request is received:
|
|
44
48
|
"""
|
|
45
49
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
50
|
+
host: nex.toa.io
|
|
46
51
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
47
52
|
accept: text/plain
|
|
48
53
|
"""
|
|
@@ -57,6 +62,7 @@ Feature: Tokens lifecycle
|
|
|
57
62
|
When the following request is received:
|
|
58
63
|
"""
|
|
59
64
|
GET /hello/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
65
|
+
host: nex.toa.io
|
|
60
66
|
authorization: Token ${{ token }}
|
|
61
67
|
accept: text/plain
|
|
62
68
|
"""
|
|
@@ -72,6 +78,7 @@ Feature: Tokens lifecycle
|
|
|
72
78
|
Given the annotation:
|
|
73
79
|
"""yaml
|
|
74
80
|
/:
|
|
81
|
+
io:output: true
|
|
75
82
|
/:id:
|
|
76
83
|
id: id
|
|
77
84
|
GET:
|
|
@@ -83,11 +90,12 @@ Feature: Tokens lifecycle
|
|
|
83
90
|
refresh: 0.1
|
|
84
91
|
"""
|
|
85
92
|
And the `identity.basic` database contains:
|
|
86
|
-
| _id | _version | username | password |
|
|
87
|
-
| efe3a65ebbee47ed95a73edd911ea328 | 1 | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
93
|
+
| _id | _version | authority | username | password |
|
|
94
|
+
| efe3a65ebbee47ed95a73edd911ea328 | 1 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
88
95
|
When the following request is received:
|
|
89
96
|
"""
|
|
90
97
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
98
|
+
host: nex.toa.io
|
|
91
99
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
92
100
|
"""
|
|
93
101
|
Then the following reply is sent:
|
|
@@ -98,6 +106,7 @@ Feature: Tokens lifecycle
|
|
|
98
106
|
When the following request is received:
|
|
99
107
|
"""
|
|
100
108
|
PATCH /identity/basic/efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
109
|
+
host: nex.toa.io
|
|
101
110
|
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
102
111
|
content-type: application/yaml
|
|
103
112
|
|
|
@@ -111,9 +120,53 @@ Feature: Tokens lifecycle
|
|
|
111
120
|
When the following request is received:
|
|
112
121
|
"""
|
|
113
122
|
GET /efe3a65ebbee47ed95a73edd911ea328/ HTTP/1.1
|
|
123
|
+
host: nex.toa.io
|
|
114
124
|
authorization: Token ${{ token }}
|
|
115
125
|
"""
|
|
116
126
|
Then the following reply is sent:
|
|
117
127
|
"""
|
|
118
128
|
401 Unauthorized
|
|
119
129
|
"""
|
|
130
|
+
|
|
131
|
+
Scenario: Issuing own token
|
|
132
|
+
Given the `identity.basic` database contains:
|
|
133
|
+
| _id | authority | username | password |
|
|
134
|
+
| efe3a65ebbee47ed95a73edd911ea328 | nex | developer | $2b$10$ZRSKkgZoGnrcTNA5w5eCcu3pxDzdTduhteVYXcp56AaNcilNkwJ.O |
|
|
135
|
+
When the following request is received:
|
|
136
|
+
"""
|
|
137
|
+
GET /identity/ HTTP/1.1
|
|
138
|
+
host: nex.toa.io
|
|
139
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
140
|
+
"""
|
|
141
|
+
Then the following reply is sent:
|
|
142
|
+
"""
|
|
143
|
+
200 OK
|
|
144
|
+
authorization: Token ${{ token }}
|
|
145
|
+
"""
|
|
146
|
+
When the following request is received:
|
|
147
|
+
"""
|
|
148
|
+
POST /identity/tokens/ HTTP/1.1
|
|
149
|
+
host: nex.toa.io
|
|
150
|
+
authorization: Token ${{ token }}
|
|
151
|
+
content-type: application/yaml
|
|
152
|
+
|
|
153
|
+
lifetime: 0
|
|
154
|
+
"""
|
|
155
|
+
Then the following reply is sent:
|
|
156
|
+
"""
|
|
157
|
+
201 Created
|
|
158
|
+
"""
|
|
159
|
+
# Token scheme must be used
|
|
160
|
+
When the following request is received:
|
|
161
|
+
"""
|
|
162
|
+
POST /identity/tokens/ HTTP/1.1
|
|
163
|
+
host: nex.toa.io
|
|
164
|
+
authorization: Basic ZGV2ZWxvcGVyOnNlY3JldA==
|
|
165
|
+
content-type: application/yaml
|
|
166
|
+
|
|
167
|
+
lifetime: 60
|
|
168
|
+
"""
|
|
169
|
+
Then the following reply is sent:
|
|
170
|
+
"""
|
|
171
|
+
403 Forbidden
|
|
172
|
+
"""
|