我正在开发一个 iOS 应用程序,利用 ROPC 流程和 AADB2C 作为支持此功能的后端端点。
https://login.microsoftonline.com/{TENANTNAME}.onmicrosoft.com/oauth2/v2.0/token?p={ROPC 策略名称}
在客户首次成功登录时,我已成功请求和检索访问 token
、刷新 token
和ID token
使用电子邮件/密码。
成功登录后,每次后续登录,我们都希望利用生物识别技术(触摸/面部 ID)。我的第一个想法是将刷新 token 存储在钥匙串(keychain)中,在强制用户输入他/她的电子邮件/密码之前检查是否存在刷新 token 。
如果 refreshToken
存在,那么我想我会使用 ?p=refresh_token
而不是 ?p 对 token 端点进行调用={INSERT ROPC Policy Name}
如果我返回成功,那么我将使用触摸/面容 ID 登录。
我的另一个想法是只使用 token ID 进行身份验证。
因此我的问题有两个:
更好的做法是什么 - iOS native 应用程序使用刷新 token 或 ID token 。
我尝试过使用刷新 token ,将
{ROPC Policy Name}
参数替换为?p=refresh_token
,但每次我尝试配置时请求时,我收到一条错误消息“请求正文必须包含以下参数:'grant_type'”
我已添加“refresh_token”作为键grant_type
的值,但该错误仍然出现。 -- 这是为什么?如果刷新 token grant_type 更好,我该如何解决这个问题。
最佳答案
你是对的。
您可以将刷新 token 保存到钥匙串(keychain),并通过面容 ID 或触摸 ID 保护此刷新 token 的使用。
The "Redeem a refresh token" section的the "Configure the resource owner password credentials flow in Azure AD B2C" document描述如何兑换为资源所有者策略颁发的刷新 token :
POST /{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
grant_type=refresh_token
&response_type=id_token
&client_id={client_id}
&resource={client_id}
&refresh_token={refresh_token}
关于ios - Azure AD B2C 刷新 token /ID token iOS Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51682869/