Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Google OAuth2使用plus.login作用域检索圈中的人_C#_Authentication_Google Plus_Google Oauth_Google Api Dotnet Client - Fatal编程技术网

C# Google OAuth2使用plus.login作用域检索圈中的人

C# Google OAuth2使用plus.login作用域检索圈中的人,c#,authentication,google-plus,google-oauth,google-api-dotnet-client,C#,Authentication,Google Plus,Google Oauth,Google Api Dotnet Client,我正在通过Microsoft.Owin库使用OAuth2身份验证构建一个MVC5应用程序,以通过google(google+)进行身份验证。我可以添加电子邮件范围,但我尝试添加plus.login范围以请求用户配置文件信息(即:他们圈子中的人)不会在响应中返回任何额外信息(用户或身份) 根据添加https://www.googleapis.com/auth/plus.login身份验证请求的作用域应提供对社交功能的访问,如其圈内人员的列表。但是通过添加plus.login范围,我不会得到任何额外

我正在通过Microsoft.Owin库使用OAuth2身份验证构建一个MVC5应用程序,以通过google(google+)进行身份验证。我可以添加
电子邮件
范围,但我尝试添加
plus.login
范围以请求用户配置文件信息(即:他们圈子中的人)不会在响应中返回任何额外信息(
用户
身份

根据添加<代码>https://www.googleapis.com/auth/plus.login身份验证请求的作用域应提供对社交功能的访问,如其圈内人员的列表。但是通过添加
plus.login
范围,我不会得到任何额外的索赔

Startup.Auth.cs

var googleOptions = new GoogleOAuth2AuthenticationOptions {
    ClientId = "xxx",
    ClientSecret = "xxx",
    Provider = new GoogleOAuth2AuthenticationProvider {
        OnAuthenticated = async context => {
            context.Identity.AddClaim(new Claim("Image", context.User.GetValue("image").ToString()));
            // profile doesn't exist in the User object
            context.Identity.AddClaim(new Claim("Profile", context.User.GetValue("profile").ToString()));
        }
    }
};
googleOptions.Scope.Add("https://www.googleapis.com/auth/plus.login");
googleOptions.Scope.Add("email");
app.UseGoogleAuthentication(googleOptions);

请求
plus.login
范围的正确方法是什么,这样我就可以查看经过身份验证的用户的圈中人员了?

以下示例列出了与当前经过身份验证的用户关联的人员

它使用电流

//PM>安装包Google.api.Plus.v1

直接从教程中撕下的代码可以在

#地区人士
/// 
///列出指定集合中的所有人员
///文件:https://developers.google.com/+/api/最新/人员/列表
/// 
/// 
///获取已识别人员的人员集合。使用“me”表示经过身份验证的用户。
/// 
公共静态IList GetAllPeople(PlusService服务,字符串_userId)
{
PeopleResource.ListRequest list=service.People.list(\u userId,PeopleResource.ListRequest.CollectionEnum.Visible);
list.MaxResults=10;
PeopleFeed PeopleFeed=list.Execute();
IList people=新列表();
////循环浏览,直到找到一个空白页
while(peopleFeed.Items!=null)
{
//将每个项目添加到列表中。
foreach(peopleFeed.Items中的个人项目)
{
人员。添加(项目);
}
//当下一个页面标记被激活时,我们将知道我们在最后一个页面
//空。
//如果是这样的话,打破僵局。
if(peopleFeed.NextPageToken==null)
{
打破
}
//准备下一页的结果
list.PageToken=peopleFeed.NextPageToken;
//执行并处理下一页请求
peopleFeed=list.Execute();
}
还人,;
}
因此,假设您的用户已正确通过上面的身份验证,您应该可以访问人员列表中的用户

•“可见”:此用户已添加到一个或多个站点的人员列表 圆圈,仅限于请求应用程序可见的圆圈


请尝试以下代码:

var googleOptions = new GoogleOAuth2AuthenticationOptions {
    ClientId = "xxx",
    ClientSecret = "xxx",
    Provider = new GoogleOAuth2AuthenticationProvider {
        OnAuthenticated = async context => {
            context.Identity.AddClaim(new Claim("Image", context.User.GetValue("image").ToString()));
            // profile doesn't exist in the User object
            context.Identity.AddClaim(new Claim("Profile", context.User.GetValue("profile").ToString()));
        }
    }
};
googleOptions.Scope.Add("email+https://www.googleapis.com/auth/plus.login");
app.UseGoogleAuthentication(googleOptions);

这是正确的范围您如何知道它不起作用?我在上下文中找不到用户对象上的任何附加项或标识对象中的任何附加声明。我觉得我只是错过了一些东西。可见返回列表是什么?对不起,“可见列表”指的是什么?请阅读文档“可见人员列表”应返回当前已验证使用的人员的人员列表资源。我感到困惑。我认为,在用户通过google的身份验证后,作用域(描述不同端点以获取有关用户的其他信息)将添加到第二个请求中,该请求将发送回请求的信息?这不对吗?我是否要向people api发出第三个请求以获取人员信息?如果您有访问权限,则需要向api发出请求以获取数据。
var googleOptions = new GoogleOAuth2AuthenticationOptions {
    ClientId = "xxx",
    ClientSecret = "xxx",
    Provider = new GoogleOAuth2AuthenticationProvider {
        OnAuthenticated = async context => {
            context.Identity.AddClaim(new Claim("Image", context.User.GetValue("image").ToString()));
            // profile doesn't exist in the User object
            context.Identity.AddClaim(new Claim("Profile", context.User.GetValue("profile").ToString()));
        }
    }
};
googleOptions.Scope.Add("email+https://www.googleapis.com/auth/plus.login");
app.UseGoogleAuthentication(googleOptions);