Skip to content

Commit 6d23f7f

Browse files
romanetarsmarcet
andauthored
feat: add validate_resource_server_ip feature flag to config and check to validate (#98)
* feat: add validate_resource_server_ip feature flag to config and check to validate Signed-off-by: romanetar <roman_ag@hotmail.com> * fix(oauth2): move disable IP adress check --------- Signed-off-by: romanetar <roman_ag@hotmail.com> Co-authored-by: smarcet <smarcet@gmail.com>
1 parent c0c5928 commit 6d23f7f

4 files changed

Lines changed: 43 additions & 24 deletions

File tree

.env.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ AUTH_PASSWORD_SHAPE_PATTERN="^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^
115115
AUTH_PASSWORD_SHAPE_WARNING="Password must include at least one uppercase letter, one lowercase letter, one number, and one special character."
116116

117117

118+
OAUTH2_VALIDATE_RESOURCE_SERVER_IP=true
119+
118120
#Open Telemetry
119121
OTEL_SERVICE_ENABLED=true
120122
OTEL_SERVICE_NAME=idp-api

app/Models/OAuth2/ResourceServer.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,9 @@ class ResourceServer extends BaseEntity
6565
* @return bool
6666
*/
6767
public function isOwn($ip)
68-
{ $provided_ips = array_map('trim', explode(',', $ip));
68+
{
69+
70+
$provided_ips = array_map('trim', explode(',', $ip));
6971
$own_ips = array_map('trim', explode(',', $this->ips));
7072
Log::debug
7173
(

app/libs/OAuth2/GrantTypes/Strategies/ValidateBearerTokenResourceServerStrategy.php

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -78,31 +78,31 @@ public function validate(AccessToken $access_token, IClient $client)
7878
'resource server is disabled!'
7979
);
8080
}
81-
//check resource server ip address
82-
if (!$resource_server->isOwn($current_ip))
83-
{
84-
throw new BearerTokenDisclosureAttemptException
85-
(
86-
sprintf
81+
if (config('oauth2.validate_resource_server_ip', false)) {
82+
//check resource server ip address
83+
if (!$resource_server->isOwn($current_ip)) {
84+
throw new BearerTokenDisclosureAttemptException
8785
(
88-
'resource server ip (%s) differs from current request ip %s',
89-
$resource_server->getIPAddresses(),
90-
$current_ip
91-
)
92-
);
93-
}
94-
// check if current ip belongs to a registered resource server audience
95-
if (!$this->token_service->checkAccessTokenAudience($access_token, $current_ip))
96-
{
97-
throw new BearerTokenDisclosureAttemptException
98-
(
99-
sprintf
86+
sprintf
87+
(
88+
'resource server ip (%s) differs from current request ip %s',
89+
$resource_server->getIPAddresses(),
90+
$current_ip
91+
)
92+
);
93+
}
94+
// check if current ip belongs to a registered resource server audience
95+
if (!$this->token_service->checkAccessTokenAudience($access_token, $current_ip)) {
96+
throw new BearerTokenDisclosureAttemptException
10097
(
101-
'access token current audience (%s) does not match with current request ip %s',
102-
$access_token->getAudience(),
103-
$current_ip
104-
)
105-
);
98+
sprintf
99+
(
100+
'access token current audience (%s) does not match with current request ip %s',
101+
$access_token->getAudience(),
102+
$current_ip
103+
)
104+
);
105+
}
106106
}
107107
}
108108
}

config/oauth2.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
return [
4+
5+
/*
6+
|--------------------------------------------------------------------------
7+
| Validate Resource Server IP Address
8+
|--------------------------------------------------------------------------
9+
|
10+
| When enabled, validates that the resource server IP address matches
11+
| the request IP and the access token audience.
12+
|
13+
*/
14+
'validate_resource_server_ip' => env('OAUTH2_VALIDATE_RESOURCE_SERVER_IP', false),
15+
];

0 commit comments

Comments
 (0)