使用Azure AD,OIDC隐式流,我可以从v2终结点获取访问令牌。 我正在使用的授权端点如下所示:
let updateProfile = UpdateProfile()
//To save the object
UserDefaults.standard.save(customObject: updateProfile, inKey: "YourKey")
//To retrieve the saved object
let obj = UserDefaults.standard.retrieve(object: UpdateProfile.self, fromKey: "YourKey")
但是,看来我得到了“ v1”访问令牌。 我在做什么错了?
答案 0 :(得分:1)
获取的令牌版本与受v1端点或v2端点保护的访问资源有关。
在我这一边,该API在v2端点中受到保护,因此它返回了v2 access_token。
https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize?client_id=<client-id>&redirect_uri=https://snv2app.azurewebsites.net&response_type=id_token+token&scope=openid api://f3d966c0-517e-4e13-a5bb-9777a916b1a0/User.read&response_mode=fragment&nonce=123
答案 1 :(得分:0)
感谢您启发我, 应用程序(代表资源)的注册方式有所不同。 基本上,差异本身是由应用清单中的“ accessTokenAcceptedVersion”字段造成的。 最初是“ null”,但我将其更改为“ 2”(如下所示)。
根据文档,“空”值也应允许使用v2令牌-在AAD一侧,它为issue,处于“打开”状态。
感谢您在此问题上的带头作用。
关于应用程序的注册方式,确实存在区别: -如果它是在Azure门户中完成的,则清单的'accessTokenAcceptedVersion'字段设置为'null' -如果是在应用程序注册门户(https://apps.dev.microsoft.com)中完成的,则默认为“ 2” 如果不会出现上面提到的问题(错误),那应该没有什么不同。