Java API
The Java API is based on the reactive libraries of Project Reactor (https://projectreactor.io/). The API is defined in the sapl-pdp-api
module:
1
2
3
4
5
<dependency>
<groupId>io.sapl</groupId>
<artifactId>sapl-pdp-api</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
The key interface is the PolicyDecisionPoint
exposing methods matching the PDP server API:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* The policy decision point is the component in the system, which will take an
* authorization subscription, retrieve matching policies from the policy
* retrieval point, evaluate the policies while potentially consulting external
* resources (e.g., through attribute finders), and return a {@link Flux} of
* authorization decision objects.
*
* This interface offers methods to hand over an authorization subscription to
* the policy decision point, differing in the construction of the
* underlying authorization subscription object.
*/
public interface PolicyDecisionPoint {
/**
* Takes an authorization subscription object and returns a {@link Flux}
* emitting matching authorization decisions.
*
* @param authzSubscription the SAPL authorization subscription object
* @return a {@link Flux} emitting the authorization decisions for the given
* authorization subscription. New authorization decisions are only
* added to the stream if they are different from the preceding
* authorization decision.
*/
Flux<AuthorizationDecision> decide(AuthorizationSubscription authzSubscription);
/**
* Takes an authorization subscription object and returns a {@link Mono}
* emitting the first matching authorization decision.
*
* @param authzSubscription the SAPL authorization subscription object
* @return an authorization decisions for the given authorization subscription.
*/
default Mono<AuthorizationDecision> decideOnce(AuthorizationSubscription authzSubscription) {
return Mono.from(decide(authzSubscription));
}
/**
* Multi-subscription variant of {@link #decide(AuthorizationSubscription)}.
*
* @param multiAuthzSubscription the multi-subscription object containing the
* subjects, actions, resources, and environments
* of the authorization subscriptions to be
* evaluated by the PDP.
* @return a {@link Flux} emitting authorization decisions for the given
* authorization subscriptions as soon as they are available. Related
* authorization decisions and authorization subscriptions have the same
* id.
*/
Flux<IdentifiableAuthorizationDecision> decide(MultiAuthorizationSubscription multiAuthzSubscription);
/**
* Multi-subscription variant of {@link #decide(AuthorizationSubscription)}.
*
* @param multiAuthzSubscription the multi-subscription object containing the
* subjects, actions, resources, and environments
* of the authorization subscriptions to be
* evaluated by the PDP.
* @return a {@link Flux} emitting authorization decisions for the given
* authorization subscriptions as soon as at least one authorization
* decision for each authorization subscription is available.
*/
Flux<MultiAuthorizationDecision> decideAll(MultiAuthorizationSubscription multiAuthzSubscription);
}
Embedded PDP
To use a PDP two implementations of the API are supplied. First, a completely embedded PDP can be used to be deployed with an application. (See: https://github.com/heutelbeck/sapl-policy-engine/tree/master/sapl-pdp-embedded)
1
2
3
4
5
<dependency>
<groupId>io.sapl</groupId>
<artifactId>sapl-pdp-embedded</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
The library with Spring auto configuration support:
1
2
3
4
5
<dependency>
<groupId>io.sapl</groupId>
<artifactId>sapl-spring-pdp-embedded</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
Remote PDP
Alternatively, a remote PDP server can be used via the same interface by using the client implementation. (See: https://github.com/heutelbeck/sapl-policy-engine/tree/master/sapl-pdp-remote)
1
2
3
4
5
<dependency>
<groupId>io.sapl</groupId>
<artifactId>sapl-pdp-remote</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
The library with Spring auto configuration support:
1
2
3
4
5
<dependency>
<groupId>io.sapl</groupId>
<artifactId>sapl-spring-pdp-remote</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>
Spring Security Integration and PEP Implementation
For Spring Security (https://spring.io/projects/spring-security), a full PEP implementation is available. A matching Spring PDP implementation also must be declared to use the integration (see above).
1
2
3
4
5
<dependency>
<groupId>io.sapl</groupId>
<artifactId>sapl-spring-security</artifactId>
<version>3.0.0-SNAPSHOT</version>
</dependency>