Service Overview
Authorization Services Overview
Morgana supports fine-grained authorization policies and is able to combine different access control mechanisms such as:
Attribute-based access control (ABAC)
Role-based access control (RBAC)
User-based access control (UBAC)
Context-based access control (CBAC)
Time-based access control
Support for custom access control mechanisms (ACMs) through a Service Provider Interface (SPI)
Morgana is based on a set of administrative UIs and a RESTful API, and provides the necessary means to create permissions for your protected resources and scopes, associate those permissions with authorization policies, and enforce authorization decisions in your applications and services.
Resource servers (applications or services serving protected resources) usually rely on some kind of information to decide if access should be granted to a protected resource. For RESTful-based resource servers, that information is usually obtained from a security token, usually sent as a bearer token on every request to the server. For web applications that rely on a session to authenticate users, that information is usually stored in a user's session and retrieved from there for each request.
Considering that today we need to consider heterogeneous environments where users are distributed across different regions, with different local policies, using different devices, and with a high demand for information sharing, Morgana Authorization Services can help you improve the authorization capabilities of your applications and services by providing:
Resource protection using fine-grained authorization policies and different access control mechanisms
Centralized Resource, Permission, and Policy Management
Centralized Policy Decision Point
REST security based on a set of REST-based authorization services
Authorization workflows and User-Managed Access
The infrastructure to help avoid code replication across projects (and redeploys) and quickly adapt to changes in your security requirements.
Architecture
From a design perspective, Authorization Service is based on a well-defined set of authorization patterns providing these capabilities:
Policy Administration Point (PAP): Provides a set of UIs based on the Morgana Administration Console to manage resource servers, resources, scopes, permissions, and policies.
Policy Decision Point (PDP): Provides a distributable policy decision point to where authorization requests are sent and policies are evaluated accordingly with the permissions being requested.
Policy Enforcement Point (PEP): Provides implementations for different environments to actually enforce authorization decisions at the resource server side.
Policy Information Point (PIP):
Terminology
Before going further, it is important to understand these terms and concepts introduced by Morgana Services.
Resource Server
Per OAuth2 terminology, a resource server is the server hosting the protected resources and capable of accepting and responding to protected resource requests.
Resource servers usually rely on some kind of information to decide whether access to a protected resource should be granted. For RESTful-based resource servers, that information is usually carried in a security token, typically sent as a bearer token along with every request to the server. Web applications that rely on a session to authenticate users usually store that information in the user’s session and retrieve it from there for each request.
In Morgana, any confidential client application can act as a resource server. This client’s resources and their respective scopes are protected and governed by a set of authorization policies.
Resource
A resource is part of the assets of an application and the organization. It can be a set of one or more endpoints, a classic web resource such as an HTML page, and so on. In authorization policy terminology, a resource is the object being protected.
Every resource has a unique identifier that can represent a single resource or a set of resources. For instance, you can manage a Banking Account Resource that represents and defines a set of authorization policies for all banking accounts. But you can also have a different resource named Alice’s Banking Account, which represents a single resource owned by a single customer, which can have its own set of authorization policies.
Scope
A resource’s scope is a bounded extent of access that is possible to perform on a resource. In authorization policy terminology, a scope is one of the potentially many verbs that can logically apply to a resource.
It usually indicates what can be done with a given resource. Example of scopes are view, edit, delete, and so on. However, scope can also be related to specific information provided by a resource. In this case, you can have a project resource and a cost scope, where the cost scope is used to define specific policies and permissions for users to access a project’s cost.
Permission
Consider this simple and very common permission:
Permission associates the object being protected with the policies that must be evaluated to determine whether access is granted.
X CAN DO Y ON RESOURCE Z
where …
X represents one or more users, roles, or groups, or a combination of them. You can also use claims and context here.
Y represents an action to be performed, for example, write, view, and so on.
Z represents a protected resource, for example, "/accounts".
Morgana provides a rich platform for building a range of permission strategies ranging from simple to very complex, rule-based dynamic permissions. It provides flexibility and helps to:
Reduce code refactoring and permission management costs
Support a more flexible security model, helping you to easily adapt to changes in your security requirements
Make changes at runtime; applications are only concerned about the resources and scopes being protected and not how they are protected.
Policy
A policy defines the conditions that must be satisfied to grant access to an object. Unlike permissions, you do not specify the object being protected but rather the conditions that must be satisfied for access to a given object (for example, resource, scope, or both). Policies are strongly related to the different access control mechanisms (ACMs) that you can use to protect your resources. With policies, you can implement strategies for attribute-based access control (ABAC), role-based access control (RBAC), context-based access control, or any combination of these.
Morgana leverages the concept of policies and how you define them by providing the concept of aggregated policies, where you can build a "policy of policies" and still control the behavior of the evaluation. Instead of writing one large policy with all the conditions that must be satisfied for access to a given resource, the policies implementation in Keycloak Authorization Services follows the divide-and-conquer technique. That is, you can create individual policies, then reuse them with different permissions and build more complex policies by combining individual policies.
Policy Provider
Policy providers are implementations of specific policy types. Keycloak provides built-in policies, backed by their corresponding policy providers, and you can create your own policy types to support your specific requirements.
Morgana provides an SPI (Service Provider Interface) that you can use to plug in your own policy provider implementations.
Permission Ticket
A permission ticket is a special type of token defined by the User-Managed Access (UMA) specification that provides an opaque structure whose form is determined by the authorization server. This structure represents the resources and/or scopes being requested by a client, the access context, as well as the policies that must be applied to a request for authorization data (requesting party token [RPT]).
In UMA, permission tickets are crucial to support person-to-person sharing and also person-to-organization sharing. Using permission tickets for authorization workflows enables a range of scenarios from simple to complex, where resource owners and resource servers have complete control over their resources based on fine-grained policies that govern the access to these resources.
In the UMA workflow, permission tickets are issued by the authorization server to a resource server, which returns the permission ticket to the client trying to access a protected resource. Once the client receives the ticket, it can make a request for an RPT (a final token holding authorization data) by sending the ticket back to the authorization server.
Last updated