asp.net-mvc – ASP.Net MVC 5带范围的Google身份验证
我正在尝试让ASP.Net MVC 5 Google OAuth2身份验证正常运行.
当我在没有任何范围的情况下设置传入GoogleOauth2AuthenticationOptions时,我就能够成功登录. var googlePlusOptions = new GoogleOAuth2AuthenticationOptions { ClientId = googleClientId,ClientSecret = googleClientSecret,SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie,Provider = new GoogleOAuth2AuthenticationProvider() { OnAuthenticated = async ctx => { ctx.Identity.AddClaim(new Claim("urn:tokens:googleplus:accesstoken",ctx.AccessToken)); } },}; app.UseGoogleAuthentication(googlePlusOptions); 然后,此调用将返回一个设置了所有属性的ExternalLoginInfo对象 ExternalLoginInfo loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 当我添加任何范围时,我没有得到任何返回的登录信息.它只是空的. var googlePlusOptions = new GoogleOAuth2AuthenticationOptions { ClientId = googleClientId,}; googlePlusOptions.Scope.Add(YouTubeService.Scope.Youtube); app.UseGoogleAuthentication(googlePlusOptions); 然后调用获取外部信息只返回null. ExternalLoginInfo loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync(); 在Google开发控制台中,我启用了以下API. > Analytics API 关于向选项添加范围的一些事情是打破GetExternalLoginInfoAsync. 解决方法
如果有人仍然与最新的微软有这个问题
OWIN中间件(3.0.0)…… 我注意到Fiddler默认情况下会将以下范围发送到accounts.google.com: scope=openid%20profile%20email 如果您通过GoogleOAuth2AuthenticationOptions.Scope.Add(…)添加自己的范围,则范围变为: scope=YOUR_SCOPES_ONLY 因此,您还需要添加默认范围(或者至少,这为我解决了问题): var googlePlusOptions = new GoogleOAuth2AuthenticationOptions { ... }; // default scopes googlePlusOptions.Scope.Add("openid"); googlePlusOptions.Scope.Add("profile"); googlePlusOptions.Scope.Add("email"); // additional scope(s) googlePlusOptions.Scope.Add("https://www.googleapis.com/auth/youtube.readonly"); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – ASP.NET MVC 4.0 RC和Newsoft.Json
- asp.net-mvc – 属性级验证错误阻碍了类级验证的验证
- 需要有关ASP.NET本地化的建议 – 存储在数据库中并显示在gr
- ASP.NET核心中的Redis缓存
- asp.net – 无法在文本框中键入double
- Asp.Net MVC验证 – 依赖字段
- asp.net-mvc-3 – 如何判断我的动作是否被RenderAction调用
- asp.net – 如何设置通配符(*)子域?
- asp.net-identity – 多租户身份服务器openid身份验证
- asp.net-web-api – 可以从Request对象获取当前的MediaType