大家早上好,
我在Azure中设置了一个App Service,并通过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错误。刷新令牌是 已撤销或已过期。 ---&GT; Microsoft.WindowsAzure.MobileServices.MobileServiceInvalidOperationException: 您无权查看此目录或页面。在 Microsoft.WindowsAzure.MobileServices.MobileServiceHttpClient + d__24.MoveNext ()[0x001ec] in:0
我在这里遗漏了什么吗? 谢谢
编辑3: 这里是来自网络服务器的应用程序日志,用于给定的请求:
2017-01-18T15:08:33 PID [6344]详细收到请求:GET https://api.near.lu/.auth/refresh 2017-01-18T15:08:33 PID [6344] 详细的JWT验证成功。学科: &#39; sid:453a1ad2710466bc9873240e888d8b91&#39;,发行人: &#39; https://api.near.lu/&#39 ;. 2017-01-18T15:08:33 PID [6344]警告 sid发布的刷新请求:453a1ad2710466bc9873240e888d8b91(SID: ac22f7309036f0c07a54b1299b9601ef)因为没有刷新令牌而失败 在令牌商店中找到。 2017-01-18T15:08:33 PID [6344] 信息发送回复:403.80禁止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]错误类型&#39; unauthorized_client&#39;发生了 在登录过程中:&#39; AADB2C90057:提供的应用程序是 未配置为允许OAuth Implicit流。相关ID: 8336662f-8847-4f8b-bb37-6925a5d3e264时间戳:2017-01-18 15:08:38Z&#39; 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验证成功。学科: &#39; 1eaf9f41-1562-4ac9-9538-b893c9123087&#39;,发行人: &#39; https://login.microsoftonline.com/07407dc1-946a-4afc-9186-84e6023ba814/v2.0/&#39 ;. 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]信息登录已完成&#39; aget&#39;。 提供者:&#39; aad&#39;。 2017-01-18T19:10:32 PID [6344]详细写作 &#39; AppServiceAuthSession&#39;网站的cookie&#39; api.near.lu&#39;。长度:792。 2017-01-18T19:10:32 PID [6344]信息重定向: https://api.near.lu/.auth/login/done#token=%7B%22authenticationToken%22%3A%22ey--REMOVED部分令牌 - %22%2C%22用户%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确定
这是我在登录后尝试刷新immediatley时得到的错误日志:
2017-01-23T10:55:06 PID [6344]详细收到请求:POST https://api.near.lu/.auth/refresh 2017-01-23T10:55:06 PID [6344] 详细的JWT验证成功。学科: &#39; sid:ed01ed7507f147976aa1704783267861&#39;,发行人: &#39; https://api.near.lu/&#39 ;. 2017-01-23T10:55:06 PID [6344]警告 由sid发布的刷新请求:ed01ed7507f147976aa1704783267861(SID: 9a6c2ee324a092937c5e2f953803e662)因为没有刷新令牌而失败 在令牌商店中找到。 2017-01-23T10:55:06 PID [6344] 信息发送回复:403.80禁止
这很奇怪,因为在上图中可以看到令牌存储已启用...
答案 0 :(得分:2)
问题可能是您当前的App Service身份验证/授权设置未配置为支持令牌刷新。确认这一点的一种简单方法是启用应用程序日志记录,并在刷新操作失败时查看应用程序日志流中的警告消息。有关应用程序日志记录的更多详细信息,请访问: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。简短版本是您需要:
您的登录代码应如下所示:
user = await Manager.CurrentClient.LoginAsync(
currentContext,
MobileServiceAuthenticationProvider.WindowsAzureActiveDirectory,
new Dictionary<string, string>() { { "scope", "openid offline_access" } });
答案 1 :(得分:0)
要使用刷新用户,我们必须将刷新令牌存储到应用服务令牌存储区。
您可以使用以下请求检查是否有刷新令牌:
Get:https://{yourMoibleAppName}.azurewebsites.net/.auth/me
X-ZUMO-AUTH: {accessToken}
您可以从user.MobileServiceAuthenticationToken
获取访问令牌。
如果没有返回刷新令牌,您可以检查是否满足以下要求:
令牌存储已启用
请求的response_type包含代码
开发人员不会撤消access_token,refresh_token,用户权限
并且所有设置都很好,但是应用程序仍然会收到403错误,我们应该提示用户再次登录(请参阅Refreshing user logins in App Service Mobile Apps)。
为了避免误解,当您指定使用Azure AD B2C租户时,您是否介意共享保护移动服务的详细步骤?