Example flow for services with user context
The following diagram identifies the flow of authentication and authorization information for services with user context. Colors are used in the following ways:
- Orange - credentials information
- Blue - endpoint access information
- Green - resource access information
- Red - proxy user and session user information
Some values are used to determine multiple types of access. These values initially appear as black (when they do not apply to a single type of access), and then later appear in one or more specific colors (to reflect the value is being used at that point in the process for a specific type of access).
Services with user context: internal users
In the following example, an API call is triggered by the Acme Lockbox service on behalf of Aaron Applegate, who is an internal user.
- When Lockbox triggers an API call, it must first request a JWT from Guidewire Hub. The
request for the JWT includes the client ID (
0oaqt9pl1vZK1kybt0h7
), the secret (aSecret
), the application's API role (scp.bc.acme_lockbox
), the application's resource access strategy (bc.service
), the fact that the call will be made for a user (bc.allowusercontext
) and additional deployment information (tenant.acme
,project.default
,planet_class.prod
). - Guidewire Hub authenticates the services based on the client ID and secret. It also verifies that the API role and resource access strategy provided in the request match what was specified when the service was registered with Guidewire Hub.
- Guidewire Hub generates a JWT and sends it to the service. This JWT includes the client
ID (
cid
) and ascp
token claim which names the API role (scp.bc.acme_lockbox
), the resource access strategy (bc.service
), thebc.allowusercontext
value (which indicates that user information is specified in an additional user context header), and additional deployment information. - The service sends the API request to BillingCenter along
with the JWT and a user context header that identifies the user
(
aapplegate@acme.com
), the user's resource access strategy (bc_username
), and resource access ID (aapplegate@acme.com
). - BillingCenter must determine the endpoint access at both
the service level and the user level. It starts at the service level. Based on the API
role value in the JWT (
scp.bc.acme_lockbox
), theacme_lockbox.role.yaml
API role file is used to define the service-level access. - Next, BillingCenter determines the user-level endpoint
access.
- Using the user name in the user context header
(
aapplegate@acme.com
), BillingCenter queries for the user roles that this user has. One role is returned:BillingRep
. - Based on the returned role, the
BillingRep.role.yaml
API role file is used to define the user-level access.
- Using the user name in the user context header
(
- BillingCenter must also determine the resource access at
the service level and the user level. It starts with the service-level resource access
strategy. Based on the resource access strategy value in the JWT
(
bc.service
), it grants service-level resource access as defined in theservice
access.yaml
files. (* BillingCenter starts withservice_ext-1.0.access.yaml
, but this file references additionalaccess.yaml
files whose name starts with "service
".) - BillingCenter determines the user-level resource access
strategy. Based on the resource access strategy value in the user context header
(
bc_username
), it grants user-level resource access as defined in theinternal
access.yaml
files. (* BillingCenter starts withinternal_ext-1.0.access.yaml
, but this file references additionalaccess.yaml
files whose name starts with "internal
".) - Proxy user access is not relevant for services with user context when the user is an internal user.
- BillingCenter processes the request.
- The session user is the internal user:
aapplegate@acme.com
. - The endpoint access is the intersection of the endpoints and operations defined
granted at the service level (
acme_lockbox.role.yaml
) and at the user level (BillingRep.role.yaml
). Endpoints, operations, and fields must be listed at both levels to be available to the call. - The resource access is the intersection of the resources accessible to the service (as
defined in the
service
access.yaml
) and the resources available to the user (as defined in theinternal
access.yaml
using the resource access ID ofaapplegate@acme.com
). In the base configuration, theservice
access.yaml
files make all resources available. Therefore, logically speaking, the service-level resource access does not specify any restrictions. The call can access any resource provided it is available through the user-level resource access.
- The session user is the internal user:
- BillingCenter provides the response to the initial call.