gpt4 book ai didi

azure - 具有旧访问 token ADAL 的 AcquireTokenAsync

转载 作者:行者123 更新时间:2023-12-03 00:10:59 24 4
gpt4 key购买 nike

我正在 Xamarin 上开发一个应用程序。我正在尝试跨多个应用程序实现单点登录。为此,我使用 ADAL 首次通过 Azure AD 对用户进行身份验证,然后用户在 AcquireTokenAsync() 中的 ADAL 显示的 O365 页面中输入凭据。

var  authContext = new AuthenticationContext(ServiceConstants.AUTHORITY);
var authResult = await authContext.AcquireTokenAsync(resourceUri, ServiceConstants.CLIENTID, ServiceConstants.RETURNURI, param);
var apiAccessToken = authResult.AccessToken;

成功进行身份验证后,我将收到的 token 保存到一个文件中,即使用户卸载应用程序,该 token 也仍然存在。

现在,下次用户启动应用程序时,我将保存的 token 传递给AcquireTokenAsync() 作为 UserAssertion

//Pass old accessToken
var userAssertion = new UserAssertion(accessToken);
var authResult = await authContext.AcquireTokenAsync(resourceUri, ServiceConstants.CLIENTID, userAssertion);

这按预期工作,并且用户已通过身份验证,而无需显示 O365 登录屏幕。

现在,当用户卸载应用程序并重新安装它时,我希望出现相同的行为。就我而言,当用户卸载并重新安装应用程序时,我尝试以相同的方式获取新 token ,方法是将保存的 token 作为 UserAssertion 添加到 AquireTokenAsync() 。但是我收到这样的错误:-

Invalid JWT token. Token format not valid.

我通过 Postman 交叉检查了 token ,它是一个有效的 token 。

编辑 enter image description here

知道如何解决这个问题吗?或者我可以实现相同的更好的方法?非常感谢任何帮助。

最佳答案

如果您已经获得了refresh_token,我们可以使用此 token 直接通过RETS静默获取access_token。

以下是一个示例供您引用:

POST /{tenant}/oauth2/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&resource=https%3A%2F%2Fservice.contoso.com%2F
&client_secret=JqQX2PNo9bpM0uEihUPzyrh // NOTE: Only required for web apps

更多详细信息请参阅下面的链接。

Refreshing the access tokens

关于azure - 具有旧访问 token ADAL 的 AcquireTokenAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46966983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com