Skip to content

Commit 041d74e

Browse files
authored
Merge pull request #16 from y-temp4/fix-scope
ALIS-3561: Fix scope
2 parents ea2befc + ede2d78 commit 041d74e

File tree

3 files changed

+28
-16
lines changed

3 files changed

+28
-16
lines changed

lambdas/http/authorization.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def handler(event, context):
4141

4242
# scopeの検証
4343
if not verify_scope_parameter(params['scope'][0]):
44-
return response_builder(400, {"error_message": "invalid scope parameter. scope parameter must be 'openid read' or 'openid write'"})
44+
return response_builder(400, {"error_message": "invalid scope parameter. scope parameter must be 'openid read' or 'openid read write'"})
4545

4646
# authrazition API
4747
new_params = urllib.parse.urlencode(params, doseq=True)

lib/utils.py

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -80,20 +80,10 @@ def verify_jwt_token(token):
8080

8181

8282
def verify_scope_parameter(scope_str):
83-
# スペースで区切られた2つの値が指定されており、
84-
# 一つはopenidでもう一つはreadかwriteが指定されていることをチェックする
85-
scope_str = re.sub(r'^\s+', '', scope_str)
86-
scope_str = re.sub(r'\s+$', '', scope_str)
87-
scopes = re.split(r'\s+', scope_str)
88-
if len(scopes) != 2:
89-
return False
90-
if not 'openid' in scopes:
91-
return False
92-
scopes.remove('openid')
93-
if scopes[0] != 'read' and scopes[0] != 'write':
94-
return False
95-
return True
96-
83+
accept_scopes = ['openid read', 'openid read write']
84+
if scope_str in accept_scopes:
85+
return True
86+
return False
9787

9888
def verify_supported_media_type(headers):
9989
lower_headers = {}

tests/integration/test_authorization.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def __get_id_token(self):
1717
)
1818
return result['AuthenticationResult']['IdToken']
1919

20-
def test_return_200(self, endpoint):
20+
def test_return_200_scope_read(self, endpoint):
2121
id_token = self.__get_id_token()
2222
response = requests.post(
2323
endpoint + '/authorization',
@@ -39,6 +39,28 @@ def test_return_200(self, endpoint):
3939
assert response.status_code == 200
4040
assert 'redirect_uri' in data
4141

42+
def test_return_200_scope_write(self, endpoint):
43+
id_token = self.__get_id_token()
44+
response = requests.post(
45+
endpoint + '/authorization',
46+
headers={
47+
'Authorization': f'Bearer {id_token}'
48+
},
49+
data={
50+
'response_type': 'code',
51+
'client_id': os.environ['TEST_AUTHLETE_SERVER_APP_CLIENT_ID'],
52+
'redirect_uri': 'http://localhost',
53+
'scope': 'openid read write',
54+
'code_challenge': 'hcCb3gToI1GPZeS_SIYWvaNT_5u0GB1oqOGQJqRKMSE',
55+
'code_challenge_method': 'S256',
56+
'subject': 'fugafuga',
57+
'sub': 'hogehgoe'
58+
}
59+
)
60+
data = response.json()
61+
assert response.status_code == 200
62+
assert 'redirect_uri' in data
63+
4264
def test_return_401_invalid_jwt(self, endpoint):
4365
id_token = 'xxxxxx'
4466
response = requests.post(

0 commit comments

Comments
 (0)