【问题标题】:Azure AD B2C Refresh Token Revoked 403Azure AD B2C 刷新令牌已撤销 403
【发布时间】:2024-04-14 08:50:02
【问题描述】:

大家早上好,

我已在 Azure 中设置了应用服务并通过 Azure AD B2C 添加了身份验证。到目前为止一切正常。 1小时后,当令牌过期时,我尝试刷新它,但随后我收到一个错误,提示刷新令牌已被撤销。这里出了什么问题?我已经像这篇文章中解释的那样设置了后端:登录时我像这样传递附加参数:

user = await Manager.CurrentClient.LoginAsync(currentContext,MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,new Dictionary<string, string>() { { "response_type", "code id_token" } });

这是我的刷新代码:

user = await Manager.CurrentClient.RefreshUserAsync();

这是我遇到的错误

{Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: 刷新失败,出现 403 Forbidden 错误。刷新令牌是 被撤销或过期。 ---> Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: 您无权查看此目录或页面。在 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient+d__24.MoveNext () [0x001ec] 在 :0

我在这里遗漏了什么吗? 谢谢

编辑: 这是门户中设置的屏幕截图

编辑 2: 这是尝试刷新令牌时服务器记录的错误形式:

编辑 3: 这里是来自网络服务器的给定请求的应用程序日志:

2017-01-18T15:08:33 PID[6344] 详细接收请求:GET https://api.near.lu/.auth/refresh 2017-01-18T15:08:33 PID[6344] 详细 JWT 验证成功。主题: 'sid:453a1ad2710466bc9873240e888d8b91',发行人: 'https://api.near.lu/'。 2017-01-18T15:08:33 PID[6344] 警告 由 sid:453a1ad2710466bc9873240e888d8b91 (SID: ac22f7309036f0c07a54b1299b9601ef) 失败,因为没有刷新令牌 在令牌存储中找到。 2017-01-18T15:08:33 PID[6344] 信息发送响应:403.80 Forbidden 2017-01-18T15:08:34 PID [6344] 详细接收请求:GET https://api.near.lu/.auth/login/aad?response_type=code%20id_token 2017-01-18T15:08:34 PID[6344] 详细下载 OpenID 配置来自 https://login.microsoftonline.com/nearauth.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1_Default 2017-01-18T15:08:36 PID[6344] 详细下载 OpenID 颁发者 钥匙来自 https://login.microsoftonline.com/nearauth.onmicrosoft.com/discovery/v2.0/keys?p=b2c_1_default 2017-01-18T15:08:37 PID[6344] 信息重定向: https://login.microsoftonline.com/nearauth.onmicrosoft.com/oauth2/v2.0/authorize?response_type=code+id_token&redirect_uri=https%3A%2F%2Fapi.near.lu%2F.auth%2Flogin%2Faad%2Fcallback&client_id=c4c15bfb-eac4-4cdc-861f-eb01594e19d2&scope=openid+profile+email&response_mode=form_post&state=redir%3D%26b2cPolicy%3D&p=b2c_1_default&nonce=9e243549b62f49878cc370048c6effa9_20170118151334 2017-01-18T15:08:39 PID [6344] 详细接收请求:POST https://api.near.lu/.auth/login/aad/callback 2017-01-18T15:08:39 PID[6344] 错误 发生“未授权客户端”类型的错误 在登录过程中:'AADB2C90057:提供的应用程序是 未配置为允许 OAuth 隐式流。相关标识: 8336662f-8847-4f8b-bb37-6925a5d3e264 时间戳:2017-01-18 15:08:38Z ' 2017-01-18T15:08:39 PID[6344] 信息发送响应:401.73 未经授权

编辑 4: 这是成功登录的日志:

2017-01-18T19:10:14 PID[6344] 详细接收请求:GET https://api.near.lu/.auth/login/aad?response_type=code%20id_token 2017-01-18T19:10:14 PID[6344] 信息重定向: https://login.microsoftonline.com/nearauth.onmicrosoft.com/oauth2/v2.0/authorize?response_type=code+id_token&redirect_uri=https%3A%2F%2Fapi.near.lu%2F.auth%2Flogin%2Faad%2Fcallback&client_id=c4c15bfb-eac4-4cdc-861f-eb01594e19d2&scope=openid+profile+email&response_mode=form_post&state=redir%3D%26b2cPolicy%3D&p=b2c_1_default&nonce=817be561f67343688001637fa7808690_20170118191514 2017-01-18T19:10:30 PID[6344] 详细接收请求:POST https://api.near.lu/.auth/login/aad/callback 2017-01-18T19:10:30 PID[6344] 详细 JWT 验证成功。主题: '1eaf9f41-1562-4ac9-9538-b893c9123087',发行人: 'https://login.microsoftonline.com/07407dc1-946a-4afc-9186-84e6023ba814/v2.0/'。 2017-01-18T19:10:30 PID [6344] 详细调用外部 HTTP 端点 POST https://login.microsoftonline.com/nearauth.onmicrosoft.com/oauth2/v2.0/token。 2017-01-18T19:10:32 PID [6344] 'aget' 的信息登录已完成。 提供者:'aad'。 2017-01-18T19:10:32 PID[6344] 详细写作 站点“api.near.lu”的“AppServiceAuthSession”cookie。长度:792。 2017-01-18T19:10:32 PID[6344] 信息重定向: https://api.near.lu/.auth/login/done#token=%7B%22authenticationToken%22%3A%22ey--REMOVED 部分令牌--%22%2C%22user%22%3A%7B%22userId%22%3A%22sid%3Aed01ed7507f147976aa1704783267861%22%7D%7D 2017-01-18T19:10:33 PID [6344] 详细接收请求:GET https://api.near.lu/.auth/login/done 2017-01-18T19:10:33 PID[6344] 信息发送响应:200.0 OK

这是我在登录后尝试立即刷新时得到的错误日志:

2017-01-23T10:55:06 PID[6344] 详细接收请求:POST https://api.near.lu/.auth/refresh 2017-01-23T10:55:06 PID[6344] 详细 JWT 验证成功。主题: 'sid:ed01ed7507f147976aa1704783267861',发行人: 'https://api.near.lu/'。 2017-01-23T10:55:06 PID[6344] 警告 由 sid:ed01ed7507f147976aa1704783267861 (SID: 9a6c2ee324a092937c5e2f953803e662) 失败,因为没有刷新令牌 在令牌存储中找到。 2017-01-23T10:55:06 PID[6344] 信息发送响应:403.80 Forbidden

这很奇怪,从上图中可以看出令牌存储已启用...

【问题讨论】:

    标签: azure azure-web-app-service azure-ad-b2c azure-app-service-envrmnt


    【解决方案1】:

    问题可能是您当前的应用服务身份验证/授权设置未配置为支持令牌刷新。确认这一点的一种简单方法是启用应用程序日志记录并在刷新操作失败时查看应用程序日志流中的警告消息。有关应用程序日志记录的更多详细信息,请参见:https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-enable-diagnostic-log

    请参阅以下博客文章(我写的)以了解有关如何更新身份验证/授权设置以支持令牌刷新的更多信息:https://cgillum.tech/2016/08/10/app-service-auth-and-azure-ad-b2c-part-2/#refresh。简短的版本是您需要:

    1. 在您的 B2C 应用注册中创建一个应用密钥,并将其设置为门户中 AAD 的身份验证/授权“高级”设置中的客户端密码。
    2. 登录时请求offline_access 范围。这样可确保您在用户登录时从AAD B2C 获得刷新令牌。

    您的登录代码应如下所示:

    user = await Manager.CurrentClient.LoginAsync(
        currentContext,
        MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,
        new Dictionary<string, string>() { { "scope", "openid offline_access" } });
    

    【讨论】:

    • 啊,抱歉,看来我没有仔细阅读您的问题(我想我是通过手机阅读的)。我看到您发布了您在移动客户端 SDK 上遇到的错误,但是服务器端应用程序日志中的错误/警告消息说明了什么?
    • 我在日志中添加了一个错误的屏幕截图,当尝试刷新到初始帖子时,它会在日志中弹出……这有帮助吗?
    • 我还从 LogFiles/Application 文件夹中添加了更详细的日志
    • 谢谢,关键问题是:“在令牌存储中找不到刷新令牌”。这很奇怪,因为如果您像在门户屏幕截图中显示的那样配置了客户端密码,那么您应该会在登录握手期间将刷新令牌发送到您的应用程序。您是否有任何可以共享的 HTTP 日志来显示与 AAD 登录页面之间的重定向?
    • 我刚刚才打开日志记录,所以我必须重新登录才能生成它们,我现在就这样做
    【解决方案2】:

    要使用刷新用户,我们必须将刷新令牌存储到应用服务令牌存储。

    您可以通过以下请求检查是否有刷新令牌:

    Get:https://{yourMoibleAppName}.azurewebsites.net/.auth/me
    X-ZUMO-AUTH: {accessToken}
    

    您可以从user.MobileServiceAuthenticationToken 获得的访问令牌。

    如果没有返回刷新令牌,可以检查是否满足以下要求:

    1. 令牌存储已启用

    2. 请求的response_type包含代码

    3. 开发者不会撤销access_token、refresh_token、用户权限

    所有设置都很好,但是应用程序仍然出现403错误,我们应该提示用户重新登录(参考Refreshing user logins in App Service Mobile Apps)。

    为了避免误解,当您指定使用 Azure AD B2C 租户时,您介意分享保护移动服务的详细步骤吗?

    更新(能够使用 register this way 的 b2c 应用程序重现此问题)

    【讨论】:

    • 您好,感谢您的回复。
    • 所以我无法在评论中向您显示回复,因为它太长了,但它没有返回刷新令牌。我在哪里可以找到是否启用了令牌存储?对于 2. 如您所见,它确实包含代码。 3. 我没有撤销任何东西...我创建了一个处理登录的 azure ad b2c 租户,并将详细信息提供给应用服务,以便它可以将其用作身份验证。
    • @Tom 您用来保护移动服务的应用程序注册类型是什么?我只能在使用 native app 时重现此问题。如果您使用的是 native app,请尝试使用 web app 而不是 native app。如果问题仍然存在,您可以分享有关该应用的详细信息以及您如何保护移动服务。
    • 我在后端启用了本机应用程序一个 Web 应用程序,但我现在禁用了本机应用程序,但我仍然遇到相同的错误...关于我如何保护移动服务,您需要哪些详细信息?
    • 您的意思是您在使用网络应用时仍然存在此问题吗?对于“详细信息”,您可以打开new portal,找到您的移动服务-> 身份验证/授权->身份验证提供程序(Azure Active Directory)->Azure Active Directory 设置,然后共享有关此设置的屏幕。请在发帖前删除屏幕截图中的敏感数据。