Azure AD B2C刷新令牌已撤销403

时间:2016-11-25 10:29:14

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

大家早上好,

我在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

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

编辑: 以下是Portal中设置的屏幕截图 Azure Settings

编辑2: 尝试刷新令牌时,服务器日志中出现以下错误: Error

编辑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:3​​0 PID [6344]详细收到请求:POST   https://api.near.lu/.auth/login/aad/callback 2017-01-18T19:10:3​​0   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:3​​0 PID [6344]详细调用外部HTTP   端点POST   https://login.microsoftonline.com/nearauth.onmicrosoft.com/oauth2/v2.0/token。   2017-01-18T19:10:3​​2 PID [6344]信息登录已完成&#39; aget&#39;。   提供者:&#39; aad&#39;。 2017-01-18T19:10:3​​2 PID [6344]详细写作   &#39; AppServiceAuthSession&#39;网站的cookie&#39; api.near.lu&#39;。长度:792。   2017-01-18T19:10:3​​2 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:3​​3 PID [6344]详细收到请求:GET   https://api.near.lu/.auth/login/done 2017-01-18T19:10:3​​3 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禁止

这很奇怪,因为在上图中可以看到令牌存储已启用...

2 个答案:

答案 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。简短版本是您需要:

  1. 在您的B2C应用注册中创建一个应用密钥,并将其设置为您的身份验证/授权&#34;高级&#34;门户网站中AAD的设置。
  2. 登录时请求offline_access范围。这可确保您在用户登录时从AAD B2C获取刷新令牌。
  3. 您的登录代码应如下所示:

    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获取访问令牌。

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

  1. 令牌存储已启用

  2. 请求的response_type包含代码

  3. 开发人员不会撤消access_token,refresh_token,用户权限

  4. 并且所有设置都很好,但是应用程序仍然会收到403错误,我们应该提示用户再次登录(请参阅Refreshing user logins in App Service Mobile Apps)。

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

    更新(能够使用register this way

    的b2c应用程序重现此发布

    enter image description here