gpt4 book ai didi

c# - GoogleOAuth2AuthenticationOptions 将 access_type 设置为离线

转载 作者:太空狗 更新时间:2023-10-29 18:31:41 24 4
gpt4 key购买 nike

我正在尝试在 MVC5 项目中使用 Microsoft.Owin.Security.Google 获取 Google 帐户的刷新 token 。要从谷歌服务器响应获取 RefreshToken,我需要设置 access_type = offline。但是我在 GoogleOAuth2AuthenticationOptions 对象中找不到任何合适的属性。

用于允许身份验证的代码

        var gao = new GoogleOAuth2AuthenticationOptions
{
ClientId = ConfigurationManager.AppSettings.Get("GoogleClientId"),
ClientSecret = ConfigurationManager.AppSettings.Get("GoogleClientSecret"),
Provider = new GoogleOAuth2AuthenticationProvider
{
OnAuthenticated = async ctx =>
{
var refreshToken = ctx.RefreshToken;
//ctx.Identity.AddClaim(new Claim("refresh_token", refreshToken));
}
}
};

gao.Scope.Add(TasksService.Scope.Tasks);
gao.Scope.Add("openid");

app.UseGoogleAuthentication(gao);

最佳答案

Microsoft.Owin.Security 库的 3.0.0 版会将此选项添加到 GoogleOAuth2AuthenticationProvider(参见已修复的 issue #227)。根据Katana Project roadmap它将在 2014 年夏末推出。如果您在正式发布之前需要此功能,您可以通过预发布 NuGet channel 获取最新版本。

然后您可以像这样配置它(在 Startup.Auth.cs 中):

app.UseGoogleAuthentication(new Microsoft.Owin.Security.Google.GoogleOAuth2AuthenticationOptions {
ClientId = ...,
ClientSecret = ...,
AccessType = "offline",
Provider = new Microsoft.Owin.Security.Google.GoogleOAuth2AuthenticationProvider {
OnAuthenticated = context => {
if (!String.IsNullOrEmpty(context.RefreshToken)) {
context.Identity.AddClaim(new Claim("RefreshToken", context.RefreshToken));
}
return Task.FromResult<object>(null);
}
});

并且您可以在 ExternalLoginCallback 中获取刷新 token (如果保留默认代码组织,则为 AccountController.cs):

string refreshToken = loginInfo.ExternalIdentity.Claims
.Where(i => i.Type == "RefreshToken")
.Select(i => i.Value)
.SingleOrDefault();

关于c# - GoogleOAuth2AuthenticationOptions 将 access_type 设置为离线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22486945/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com