smolnar82 opened a new pull request, #625:
URL: https://github.com/apache/knox/pull/625
## What changes were proposed in this pull request?
A brand new Maven module was created where all authentication-, and
authorization-related REST API endpoints can/should be added in the future.
Within this module, a new Knox service type was added called
`KNOX-AUTH-SERVICE`, which should be added into any Knox topology like this:
```
<service>
<role>KNOX-AUTH-SERVICE</role>
</service>
```
In this JIRA I already implemented one REST API endpoint with a very simple
job: If a valid principal is found in the incoming request, a header is added
to the response (by default `X-Knox-Actor-ID`) with the principal name. In
addition, if the authenticated subject has (have) group(s), they are added into
comma-separated entries in the header(s) of the default form
`X-Knox-Actor-Groups-#num`. Each group header has a character limit of 1000 to
keep them reasonably sized. The header names can be customized via
configuration properties.
## How was this patch tested?
Implemented new unit test cases as well as run the following manual steps:
1. Added the above-referenced new Knox service to the sandbox topology
2. Executed the following `curl` commands and verified the `X-Knox-Actor-ID`
header was properly populated.
```
$ curl -iku guest:guest-password
https://localhost:8443/gateway/sandbox/auth/api/v1/pre
HTTP/1.1 200 OK
Date: Tue, 23 Aug 2022 16:33:27 GMT
Set-Cookie: KNOXSESSIONID=node01qn1mbdr94rhswx5i66zrdn5r0.node0;
Path=/gateway/sandbox; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/sandbox; Max-Age=0;
Expires=Mon, 22-Aug-2022 16:33:27 GMT; SameSite=lax
X-Knox-Actor-ID: guest
Content-Length: 0
$ curl -iku tom:tom-password
https://localhost:8443/gateway/sandbox/auth/api/v1/pre
HTTP/1.1 200 OK
Date: Tue, 23 Aug 2022 16:33:45 GMT
Set-Cookie: KNOXSESSIONID=node01w44u6anaenbvils5k1rx956n1.node0;
Path=/gateway/sandbox; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/sandbox; Max-Age=0;
Expires=Mon, 22-Aug-2022 16:33:45 GMT; SameSite=lax
X-Knox-Actor-ID: tom
Content-Length: 0
$ curl -iku admin:admin-password
https://localhost:8443/gateway/sandbox/auth/api/v1/pre
HTTP/1.1 200 OK
Date: Tue, 23 Aug 2022 16:33:57 GMT
Set-Cookie: KNOXSESSIONID=node062oijrd1x3821y26a9dx71ghw2.node0;
Path=/gateway/sandbox; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/sandbox; Max-Age=0;
Expires=Mon, 22-Aug-2022 16:33:57 GMT; SameSite=lax
X-Knox-Actor-ID: admin
Content-Length: 0
```
3. Updated the `identity-assertion` provider in the sandbox topology with
group mapping (it was easier than configuring the demo LDAP factory to lookup
groups) as follows:
```
<provider>
<role>identity-assertion</role>
<name>Default</name>
<enabled>true</enabled>
<param>
<name>group.principal.mapping</name
<value>admin=longGroupName1,longGroupName2,...,longGroupName99</value>
</param>
</provider>
```
4. Executed one of the above `curl` commands and verified the group headers
were populated as expected:
```
$ curl -iku admin:admin-password
https://localhost:8443/gateway/sandbox/auth/api/v1/pre
HTTP/1.1 200 OK
Date: Wed, 24 Aug 2022 06:15:15 GMT
Set-Cookie: KNOXSESSIONID=node01aj8n7bjlmw8r1g8kfawtjlqx01.node0;
Path=/gateway/sandbox; Secure; HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Set-Cookie: rememberMe=deleteMe; Path=/gateway/sandbox; Max-Age=0;
Expires=Tue, 23-Aug-2022 06:15:15 GMT; SameSite=lax
X-Knox-Actor-ID: admin
X-Knox-Actor-Groups-1:
longGroupName49,longGroupName48,longGroupName47,longGroupName46,longGroupName45,longGroupName44,longGroupName43,longGroupName42,longGroupName41,longGroupName40,longGroupName59,longGroupName58,longGroupName57,longGroupName56,longGroupName55,longGroupName54,longGroupName53,longGroupName52,longGroupName51,longGroupName50,longGroupName69,longGroupName68,longGroupName67,longGroupName66,longGroupName65,longGroupName64,longGroupName63,longGroupName62,longGroupName61,longGroupName60,longGroupName2,longGroupName3,longGroupName4,longGroupName5,longGroupName1,longGroupName79,longGroupName6,longGroupName7,longGroupName8,longGroupName9,longGroupName70,longGroupName78,longGroupName77,longGroupName76,longGroupName75,longGroupName74,longGroupName73,longGroupName72,longGroupName71,longGroupName81,longGroupName80,longGroupName89,longGroupName88,longGroupName87,longGroupName86,longGroupName85,longGroupName84,longGroupName83,longGroupName82,longGroupName19,longGroupName18,longG
roupName17,longGroupName16
X-Knox-Actor-Groups-2:
longGroupName15,longGroupName14,longGroupName13,longGroupName92,longGroupName91,longGroupName90,longGroupName12,longGroupName11,longGroupName99,longGroupName10,longGroupName98,longGroupName97,longGroupName96,longGroupName95,longGroupName94,longGroupName93,longGroupName29,longGroupName28,longGroupName27,longGroupName26,longGroupName25,longGroupName24,longGroupName23,longGroupName22,longGroupName21,longGroupName20,longGroupName39,longGroupName38,longGroupName37,longGroupName36,longGroupName35,longGroupName34,longGroupName33,longGroupName32,longGroupName31,longGroupName30
Content-Length: 0
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]