在我们设置联合的Azure AD(SSO)之前,代码运行良好。有关此链接的更多信息。https://blogs.msdn.microsoft.com/azuredev/2018/01/22/accessing-the-power-bi-apis-in-a-federated-azure-ad-setup/
源代码是用python开发的。
def token():
username,password = login() #get login
data = {
'grant_type': 'password',
'scope': 'openid',
'resource': 'https://analysis.windows.net/powerbi/api',
'client_id': '******',
'username': username,
'password': password
}
endpoint = 'https://login.microsoftonline.com/common/oauth2/token'
r = requests.post(endpoint, data=data)
data = r.json()
access_token = data['access_token']
headers = {'Content-Type': "application/json",
'Authorization': 'Bearer ' +access_token}
return headers
Error:
access_token = data['access_token']
KeyError: 'access_token'
有人遇到这个问题并解决了吗?
提前感谢
默认情况下,此功能不起作用的原因是,Azure AD将阻止联合帐户的ROPC流。仅出于安全原因使用云帐户(onmicrosoft.com域)时,此流程才有效。如果您需要使用联合帐户进行身份验证,则最好使用ADAL库。我们在这里有一个ADAL Java库。 https://github.com/AzureAD/azure-activedirectory-library-for-java/wiki/Acquiring-Tokens-with-username-and-password
另外,请注意:
Microsoft建议您不要使用ROPC流。在大多数情况下,并建议使用更安全的替代方法。这个流程需要对应用程序的高度信任,并带有其他流程中没有的风险。你只能用这个无法使用其他更安全的流程时的流程。
参考: