4
4
https://github.com/AzureAD/microsoft-authentication-library-for-cpp/pull/2406/files
5
5
"""
6
6
from threading import Event
7
+ import json
7
8
import logging
8
9
9
10
import pymsalruntime # See https://github.com/AzureAD/microsoft-authentication-library-for-cpp/pull/2419/files#diff-d5ea5122ff04e14411a4f695895c923daba73c117d6c8ceb19c4fa3520c3c08a
@@ -31,8 +32,9 @@ def _read_account_by_id(account_id):
31
32
callback_data .signal .wait ()
32
33
return callback_data .auth_result
33
34
34
- def _signin_silently (authority , client_id ):
35
+ def _signin_silently (authority , client_id , scope ):
35
36
params = pymsalruntime .MSALRuntimeAuthParameters (client_id , authority )
37
+ params .set_requested_scopes (scope or "https://graph.microsoft.com/.default" )
36
38
callback_data = _CallbackData ()
37
39
pymsalruntime .signin_silently (
38
40
params ,
@@ -49,15 +51,25 @@ def _signin_interactively():
49
51
callback_data .signal .wait ()
50
52
return callback_data .auth_result
51
53
52
- def _acquire_token_silently (authority , client_id , account ):
54
+ def _acquire_token_silently (authority , client_id , account , scope ):
53
55
params = pymsalruntime .MSALRuntimeAuthParameters (client_id , authority )
56
+ params .set_requested_scopes (scope )
54
57
callback_data = _CallbackData ()
55
58
pymsalruntime .signin_silently (
56
59
params ,
57
60
"correlation" , # TODO
58
61
lambda result , callback_data = callback_data : callback_data .complete (result ))
59
62
callback_data .signal .wait ()
60
- return callback_data .auth_result
63
+ result = callback_data .auth_result
64
+ return {k : v for k , v in {
65
+ "error" : result .get_error (),
66
+ "access_token" : result .get_access_token (),
67
+ #"expires_in": result.get_access_token_expiry_time(), # TODO
68
+ #"scope": result.get_granted_scopes(), # TODO
69
+ "id_token_claims" : json .loads (result .get_id_token ())
70
+ if result .get_id_token () else None ,
71
+ "account" : result .get_account (),
72
+ }.items () if v }
61
73
62
74
def _acquire_token_interactive (
63
75
authority ,
@@ -95,18 +107,19 @@ def acquire_token_interactive(
95
107
scopes , # type: list[str]
96
108
** kwargs ):
97
109
"""MSAL Python's acquire_token_interactive() will call this"""
110
+ scope = " " .join (scopes )
98
111
result = _signin_silently (authority , client_id )
99
- logger .debug ("%s, %s, %s" , result , dir (result ), result .get_error ())
112
+ logger .debug ("%s, %s, %s, %s, %s" , client_id , scope , result , dir (result ), result .get_error ())
100
113
if not result .get_account ():
101
114
result = _signin_interactively (authority , client_id )
102
115
if not result .get_account ():
103
116
return {"error" : result .get_error ()} # TODO
104
117
105
118
result = _acquire_token_silently (
106
- authority , client_id , account , scopes , ** kwargs )
119
+ authority , client_id , account , scope , ** kwargs )
107
120
if not result .get_access_token ():
108
121
result = _acquire_token_interactive (
109
- authority , client_id , account , scopes , ** kwargs )
122
+ authority , client_id , account , scope , ** kwargs )
110
123
if not result .get_access_token ():
111
124
return {"error" : result .get_error ()} # TODO
112
125
# TODO: Also store the tokens and account into MSAL's token cache
@@ -123,9 +136,13 @@ def acquire_token_silent(
123
136
authority , # type: str
124
137
client_id , # type: str
125
138
scopes , # type: list[str]
126
- account ,
139
+ account = None , # TBD
127
140
):
128
- wam_account = _read_account_by_id (account ["some_sort_of_id" ]) # TODO
141
+ scope = " " .join (scopes )
142
+ if account :
143
+ wam_account = _read_account_by_id (account ["some_sort_of_id" ]) # TODO
144
+ else :
145
+ wam_account = _signin_silently (authority , client_id , scope ).get_account ()
129
146
if wam_account :
130
- return _acquire_token_silently (authority , client_id , scopes , wam_account )
147
+ return _acquire_token_silently (authority , client_id , wam_account , scope )
131
148
0 commit comments