azure 如何使用Microsoft OAuth获取其他资源的访问令牌

yyyllmsg  于 2023-02-25  发布在  其他
关注(0)|答案(2)|浏览(142)

用户使用登录

https://login.live.com/oauth20_authorize.srf

Parameters:
client_id=<CLIENT_ID>
response_type=code
scope=XboxLive.signin offline_access
redirect_uri=<REDIRECT_URL>

得到一个授权码M.R3_BAY.5530f5eb ...
使用时:

https://login.live.com/oauth20_token.srf

grant_type=authorization_code
client_id=<CLIENT_ID>
scope=Xboxlive.signin Xboxlive.offline_access
code=M.R3_BAY.5530f5eb...
redirect_uri=https://localhost/oauth_success
client_secret=<CLIENT_SECRET>

正在获取访问令牌和刷新令牌。
我希望使用其中一个令牌获取作用域{https://www.example.com openid offline_access}的另一个access_token和refresh_token。我不希望用户重新进行身份验证。graph.microsoft.com/.default openid offline_access}. I don't want the user to reauthenticate.
大概是这样:

https://login.microsoftonline.com/common/oauth2/v2.0/token

client_id=<CLIENT_ID>
scope=https://graph.microsoft.com/.default openid offline_access
refresh_token=M.R3_BL2.-CTnwtvT1!SRhk...
grant_type=refresh_token
client_secret=<CLIENT_SECRET>

但它给了我:请求被拒绝,因为请求的一个或多个作用域未经授权或已过期。用户必须首先登录并授予客户端应用程序对请求的作用域的访问权限

  • 我已经找到了如何在MSAL中使用WithExtraScopeToConsent来实现这一点。但我只在MSAL.NET和MSAL.JS中找到了这一点。我在MSAL4J中找不到它。但我想通过一个简单的请求来实现这一点,而不使用第三方库。
unguejic

unguejic1#

从屏幕截图看,代码中似乎缺少"&",下面是获取访问令牌的示例代码:

如需了解更多信息:www.example.comhttps://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow#example

bvjxkvbb

bvjxkvbb2#

我尝试在我的环境中重现相同的结果,结果如下:

我使用以下authorize端点生成了auth代码:

https://login.microsoftonline.com/common/oauth2/v2.0/authorize? 
client_id=ClientID
&response_type=code  
&redirect_uri=https://jwt.ms
&response_mode=query  
&scope=https://graph.microsoft.com/.default openid offline_access
&state=12345

我使用授权代码流生成了访问令牌,如下所示:

https://login.microsoftonline.com/common/oauth2/v2.0/token 

client_id:ClientID
grant_type:authorization_code
code:code
redirect_uri:https://jwt.ms
scope:https://graph.microsoft.com/.default openid offline_access
client_secret:ClientSecret

现在,通过使用On-Behalf-Of flow,我使用以下参数生成了访问令牌:

https://login.microsoftonline.com/common/oauth2/v2.0/token 

client_id:ClientID
client_secret:ClientSecret
scope:https://graph.microsoft.com/.default 
grant_type:urn:ietf:params:oauth:grant-type:jwt-bearer
assertion:accesstokengeneratedabove
requested_token_use:on_behalf_of

参考:

GitHub - A Java Web API that calls another web API with the Microsoft identity platform using the On-Behalf-Of flow

相关问题