应用服务刷新令牌

时间:2017-01-19 19:56:24

标签: xamarin.forms azure-web-sites azure-mobile-services

使用MobileServiceClient针对App Service刷新Google令牌方面有任何改变。我曾经使用MobileServiceClient在我的Xamarin Forms应用程序中刷新Google令牌。现在,登录后,任何刷新尝试都会被禁止返回。

我的登录代码如下:

public class Authentication : IAuthentication
{
    public async Task<MobileServiceUser> LoginAsync(MobileServiceClient mobileClient, MobileServiceAuthenticationProvider provider)
    {
        return await mobileClient.LoginAsync(
            Forms.Context, 
            provider, 
            new Dictionary<string, string>()
            {
                { "access_type", "offline" }
            });
    }
}

我的刷新代码是:

var user = await MobileService.RefreshUserAsync();

即使我在成功登录后立即尝试刷新,刷新也会失败。 Token Store配置为“开启”。刷新适用于Microsoft提供程序。几个月前它正在运作。

Microsoft.Azure.Mobile.Client v3.1.0
Microsoft.Azure.Mobile.Server v2.0.0

直接浏览https://[my-website].azurewebsites.net/.auth/login/google返回“您已成功登录”

直接浏览https://[my-website].azurewebsites.net/.auth/me返回[{ “的access_token”: “ya29.Gl3ZAw6B1H0cT_e6vRlHgwQd0U-bcDSKo_CGQ9wKwPH8H-EbtNojP61JSzDaiIgSzU14PrT3QRb14NsFPhFYrU8ikCPGkhwKkZMAtHCNSdzDhTPm5cl89VrAlNc3vRU”, “expires_on”: “2017-01-20T15:00:21.3928445Z”, “id_token”:” eyJhbGciOiJSUzI1NiIsImtpZCI6IjZlYzMwOTBlZjgyM2YxMWFhN2VhNDE0N2FlZWM1Zjk0YmViNWZkMDMifQ。 2LWMvcGhvdG8uanBnIiwiZ2l2ZW5fbmFtZSI6ImdlcmFyZCIsImZhbWlseV9uYW1lIjoiY3JvY2tlbmJlcmcifQ.Qie3hRwKP-mbzMp3gzWatmQdLLVw3Ae7PXw1Ly8Se7-EQWBPgky0TsQ-fvZIasiHaq1tQu9lXyNu9qYqaaAvKxKCGxRE5yYhC76Yar_rQig14lf42bMRYQ3ADzwsPZ0yUbEpk-h4_HU5Ld1lNqYG-hgzEdUsJm_uspJk7FggwcfuPw-YQJr-GXbqd2Om9fmgGPrPrsFy7EzPGL27q_BIY3cOLEVX0e3tbAAVhxFCri835nBKdkYOP9X2g6wSuMWCq6iPOjFzErhVYR_WUwi5H-UW6mJHswcAfs_3Hwwt9RzCqfcyS1ZaehQVJE5B3uvK9WmAOrbD7uyEQmSli_zRWw “ ”PROVIDER_NAME“: ”谷歌“, ”user_claims“:[{ ”典型值“: ”ISS“, ”VAL“:” HTTPS: //accounts.google.com"},{"typ":"iat","val":"1484920821"},{"typ":"exp","val":"1484924421"},{"typ” : “at_hash”, “VAL”: “XGkwj8ZbeOF_cwJjjxJLFw”},{ “典型值”: “AUD”, “VAL”: “748073468649-jtm59t7mlcsci89lokbuvseoann28bgq.apps.googleusercontent.com”},{ “典型值”:“HTTP:// schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier","val":"101812912381918040847"},{"typ":"email_verified","val":"true"},{"typ” : “AZP”, “VAL”: “748073468649-jtm59t7mlcsci89lokbuvseoann28bgq.apps.googleusercontent.com”},{ “典型值”:“HTTP://schemas.xml soap.org/ws/2005/05/identity/claims/emailaddress","val":"[my-googleemail]"},{"typ":"name","val":"[my - name]“ },{ “典型值”: “图像”, “VAL”: “https://lh5.googleusercontent.com/-ZH5LACTaA4I/AAAAAAAAAAI/AAAAAAAAAAA/AKB_U8tijfyeCwBOmYLsNc8AFIq3CTbaTw/s96-c/photo.jpg”},{ “典型值”: “http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname","val":"[my-givenname]"},{"typ":"http://schemas.xmlsoap .ORG / WS / 2005/05 /同一性/权利要求/姓”, “VAL”: “[我-姓]”}], “USER_ID”: “[我-googleemail]”}]

直接浏览https://[my-website].azurewebsites/.auth/refresh返回“您无权查看此目录或页面”

如果我使用“microsoftaccount”重复这些步骤,则最后一次刷新步骤

来自Azure请求跟踪:
107. -GENERAL_FLUSH_RESPONSE_START
0毫秒

信息 108. -GENERAL_RESPONSE_HEADERS
头 内容类型:text / html 服务器:Microsoft-IIS / 8.0 X-FE-DATA:AppId:Unknown-StatusCode X-Powered-By:ASP.NET DWAS-Handler-Name:BEGIN | 403 | 80 | 0x0 | CONFIG_SUCCESS | ExtensionlessUrlHandler-Integrated-4.0 | ###。##。##。### | \ ###。##。##。## \体积-4-默认\&安培; ApiApp = 0
0毫秒

冗长 109. -GENERAL_RESPONSE_ENTITY_BUFFER
缓冲区
您无权查看此目录或页面 0毫秒

信息 110. -GENERAL_FLUSH_RESPONSE_END
BytesSent 400
ErrorCode操作成功完成            (0x0)

2 个答案:

答案 0 :(得分:1)

事实证明,使用Google登录时,刷新令牌仅在首次登录时发出。我移动了我的Azure网站并重新命名了OAuth客户端设置,因此我能够登录,但Token Store不再拥有我最初登录Google时发送的refresh_token副本。在这里找到了答案的其余部分。

Not receiving Google OAuth refresh token

答案 1 :(得分:0)

根据您的详细信息,我注意到当您直接浏览https://[my-website].azurewebsites.net/.auth/me时,回复中不包含refresh_token。要隔离此问题,您可以参考以下步骤:

1.浏览器https://brucechen-mobile.azurewebsites.net/.auth/login/google?access_type=offline并使用Google帐户登录;

2.访问/.auth/me以检索我记录的信息,如下所示:

3.浏览器/.auth/refresh,看看您是否可以获得200个http状态代码的响应。

此外,您可以按照此官方tutorial关于刷新App Service Mobile Apps中的用户登录信息来解决此问题。此外,您可以在调用MobileService.RefreshUserAsync()时利用Fiddler捕获详细响应。