Google 应用程序目录 API(1.6 及更高版本)DotNetOpenAuth 无法解析
Posted
技术标签:
【中文标题】Google 应用程序目录 API(1.6 及更高版本)DotNetOpenAuth 无法解析【英文标题】:Google apps Directory API (1.6 and above) DotNetOpenAuth not resolving 【发布时间】:2013-12-18 22:34:03 【问题描述】:这段代码变化很快,很难掌握哪些有效,哪些无效...
我在看这个帖子:Have you used Google's Directory API?
使用的是 1.4 库。
我通过 nuget 安装了 1.6 API。但是,无法解析 NativeApplicationClient 和 IAuthorizationState。我的印象是我不再需要 DotNetOpenAuth nuget 包或 Google.Apis.Authentication 包(我相信它们已经解决了。
这是我正在使用的完整且经过修改的代码:(如果您有更好的使用新 API 创建用户的示例,我希望看到!)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Diagnostics;
using Google;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Auth;
using Google.Apis.Download;
using Google.Apis.Logging;
using Google.Apis.Services;
using Google.Apis.Upload;
using Google.Apis.Admin.Directory;
using Google.Apis.Admin.Directory.directory_v1.Data;
namespace GoogleAddUser
class Program
static void Main(string[] args)
// Display the header and initialize the sample.
//CommandLine.EnableExceptionHandling();
Console.WriteLine("Create users in a google apps domain!");
Console.WriteLine("by Jonas Bergstedt 2013");
// Get the user data and store in user object
Console.Write("Email: ");
string userId = Console.ReadLine();
Console.Write("Givenname: ");
string GivenName = Console.ReadLine();
Console.Write("Familyname: ");
string FamilyName = Console.ReadLine();
Console.Write("Password: ");
string Password = Console.ReadLine();
User newuserbody = new User();
UserName newusername = new UserName();
newuserbody.PrimaryEmail = userId;
newusername.GivenName = GivenName;
newusername.FamilyName = FamilyName;
newuserbody.Name = newusername;
newuserbody.Password = Password;
// Register the authenticator.
var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description)
ClientIdentifier = "<your clientId from Google APIs Console>",
ClientSecret = "<your clientsecret from Google APIs Console>",
;
var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
// Create the service.
var service = new DirectoryService(new BaseClientService.Initializer()
Authenticator = auth,
ApplicationName = "Create User",
ApiKey = "<your API Key from Google APIs console> (not sure if needed)"
);
User results = service.Users.Insert(newuserbody).Execute();
Console.WriteLine("User :" + results.PrimaryEmail + " is created");
Console.WriteLine("Press any key to continue!");
Console.ReadKey();
private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
// Get the auth URL:
IAuthorizationState state = new AuthorizationState(new[] DirectoryService.Scopes.AdminDirectoryUser.GetStringValue() );
state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
Uri authUri = arg.RequestUserAuthorization(state);
// Request authorization from the user (by opening a browser window):
Process.Start(authUri.ToString());
Console.WriteLine();
Console.Write("Authorization Code: ");
string authCode = Console.ReadLine();
// Retrieve the access token by using the authorization code:
return arg.ProcessUserAuthorization(authCode, state);
【问题讨论】:
【参考方案1】:从 1.6.0-beta 版开始,我们提供了一个新的 Google.Apis.Auth NuGet 包(使用 DNOA 的 Google.Apis.Authentication 已过时!)。您已经安装了该软件包,因为所有新 API 都引用了它。请查看我们的OAuth2 wiki 页面,了解有关如何使用新 OAuth2 流程的更多详细信息(它不再是魔法,现在流程真的有意义了!)
我建议您订阅我们的announcement blog 和我的personal blog 以获取有关客户端库的更多信息。在我们的公告博客中,我们描述了新 OAuth2 包的原因。
希望对你有帮助。
【讨论】:
我在博客上的任何地方都没有看到订阅链接,我还需要去其他地方订阅吗? 您可以使用feedly.com 来管理您对博客的订阅(这就是我正在做的)。您也可以加入我们的外部小组 (groups.google.com/forum/?hl=en&fromgroups#!forum/…)。新版本的信息也会在外部小组中发布。以上是关于Google 应用程序目录 API(1.6 及更高版本)DotNetOpenAuth 无法解析的主要内容,如果未能解决你的问题,请参考以下文章
使用 jquery 1.6 及更高版本会使 Django 的 FilteredSelectMutliple 无法使用
android M 之前的运行时权限(api 14 及更高版本)
Android Edittext 不能专注于 API 22(代码在 API 23 及更高版本上运行良好)
在 API 15 及更高版本中使用 PreferenceActivity