当前位置: 首页 > 知识库问答 >
问题:

请求Azure应用服务身份验证刷新令牌

朱典
2023-03-14

我很难让刷新令牌在Azure App Service中使用移动应用程序为某些身份验证提供商工作。CGillum就此写了一篇很棒的文章(http://cgillum.tech/2016/03/07/app-service-token-store/ ),在这篇文章之后,我发现刷新方法对微软账户很有效,但我很难刷新脸书和谷歌的访问令牌。我们的应用程序(Xamarin Forms)使用微软账户、谷歌和脸书作为认证提供者。有了你在帖子里的说明,它就像一个微软帐户的魅力。

对于Google,当在LoginAsync中设置access_mode=offline时,我仍然无法刷新我的访问令牌,并且在Azure的流日志中出现了一个错误,指出了问题所在,但我不知道该怎么做。对于Facebook,我在日志中得到了同样的错误,但我不知道如何请求脱机访问,因此这里的问题更多的是“如何为Facebook请求脱机访问”。

错误如下:使用Google登录会呈现以下日志条目(删除了一些详细信息...)

2016-03-29T14:45:12 PID[5536]收到的详细请求:获取https://nnn.azurewebsites.net/.auth/login/google?access _ mode = offline 2016-03-29t 14:45:12 PID[5536]信息重定向:https://accounts.google.com/o/oauth2/v2/auth?响应类型............2016-03-29T14:45:38 PID[5536]收到的详细请求:获取https://nnn.azurewebsites.net/.认证/登录/谷歌/回拨?state=nonce=fd.......2016-03-29T14:45:38 PID[5536]详细调用到外部HTTPendpointPOST https://www.googleapis.com/oauth2/v4/token. 2016-03-29t 14:45:38 PID[5536]已为“nnn@nnn.com”完成信息登录。提供商:“谷歌”。2016-03-29T14:45:38 PID[5536]详细写入网站“nnn.azurewebsites.net”的“AppServiceAuthSession”cookie。长度:664。信息重定向:https://nnn.azurewebsites.net/.auth/log in/done # token = { " authenticationToken ":" eyJ0e........2016-03-29t 14:45:39 PID[5536]Verbose收到请求:获取https://nnn.azurewebsites.net/.auth/login/done 2016-03-29t 14:45:39 PID[5536]信息发送响应:200.0 OK

然后,当尝试调用 refresh 方法时,将在日志中写入以下内容:

2016-03-29T14:53:14 PID[5536]详细接收请求:GEThttps://nnn.azurewebsites.net/.auth/refresh2016-03-29T14:53:14 PID[5536]详细JWT验证成功。主题:'sid: cc7e265f97060b2b067367d1ee02d808',发行人:'https://nnn.azurewebsites.net/'。2016-03-29T14:53:14 PID[5536]警告sid: cc7e265f97060b2b067367d1ee02d808(SID: 37776b6Cabedf8ff38df56de2e5db739)发出的刷新请求失败,因为在令牌存储中没有找到刷新令牌。2016-03-29T14:53:14 PID[5536]信息发送响应:400.80错误请求

令牌存储已为该服务启用,并且适用于Microsoft帐户。这里有没有人知道什么地方出了问题,以及如何使用Google going更新访问令牌?

如何为Facebook启用刷新令牌?

用于刷新访问令牌并因此在上面的Azure日志中生成输出的代码是:

    public async Task<bool> RefreshAccessToken()
    {
        // http://cgillum.tech/2016/03/07/app-service-token-store/
        // Calling /.auth/refresh will update the tokens in the token store
        // and will also return a new mobile authentication token.
        JObject refreshJson = (JObject)await App.m_azureMSClient.InvokeApiAsync("/.auth/refresh", HttpMethod.Get, null);

        string newToken = refreshJson["authenticationToken"].Value<string>();
        App.m_azureMSClient.CurrentUser.MobileServiceAuthenticationToken = newToken;
        App.Current.Properties[App.m_propNameAuthToken] = newToken; // persist it

        return true;
    }

共有1个答案

沈飞跃
2023-03-14

应用服务不支持脸书的令牌刷新。但是,令牌持续60天,因此不太需要此功能,因为您可以要求用户每60天交互登录一次(在大多数情况下应该会立即成功)。

如果您强烈需要能够刷新Facebook代币,另一个选项是使用Facebook SDK,它会自动为您处理刷新。更多信息请点击这里:https://developers.facebook.com/docs/facebook-login/access-tokens/expiration-and-extension.在这种情况下,您可以使用移动应用程序的非交互式登录(也称为客户端定向登录)再次登录,以获取用于调用API的最新身份验证令牌。

编辑:关于谷歌,看起来你的查询字符串可能是错误的。尝试access_type=offline。看起来您正在指定access_mode=offline,这是不正确的。

 类似资料:
  • 除了用户名和密码(例如来自ACS的令牌)之外,是否还有其他使用AMQP对Azure服务总线进行授权的方法? 在我的场景中,我希望能够在不公开凭据的情况下为资源级客户端提供对服务总线的访问权限。

  • 在我的网络项目中,我想让用户使用用户名/密码和微软帐户登录。技术-堆栈: Asp.网络核心 角 Azure应用服务 首先,我创建了用户名/密码登录。这样地: 启动。反恐精英: 登录方式: 并通过[授权]保护我的api enpoints。到现在为止,一直都还不错。。。这很有效。 现在我想添加一个登录方法与Microsoft帐户。我使用Azure应用服务身份验证/授权(https://docs.mic

  • 我正在尝试向正在运行的本地服务器发出GET请求。我无法返回正确的数据,我看到“未经授权”的响应。如果字符串“token”是正确的,那么任何人都能发现任何明显的问题吗。 }* 我能够从命令行获得一个curl请求:

  • } 要获取令牌,我执行以下步骤: > 使用浏览器转到:http://localhost:9000/oauth/authorize?response_type=code&client_id=test&redirect_uri=http%3a%2f%2flocalhost%3a8080%2f&scope=write 首先,它将我重定向到一个登录表单,在那里我输入用户名和密码:admin abc 请帮我

  • 我们使用应用服务身份验证来保护网络 API,并使用 Google 作为身份验证提供程序。当我们从浏览器触发请求时(当会话信息在cookie中时),它按预期工作 IIS日志: 2016-05-29T13:51:19 PID[3600]详细接收请求:GEThttps://XXXXXX.azurewebsites.net/api/user2016-05-29T13:51:19 PID[3600]详细找到

  • 问题内容: 在使用Java EE 6的Web应用程序上,我想将某些功能作为Json Rest Service公开。我想使用身份验证令牌进行登录,用户将发送其用户名,密码,服务器将发送回令牌,该令牌将用于授权用户在给定时间内的进一步请求。 到目前为止,有几个问题困扰着我; 当服务器创建令牌并将其发送给客户端时,服务器是否应该使用像哈希表这样的东西作为用户ID令牌对将其保存在DB或Bean中? 我可以