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

我的Android Studio应用仅适用于API 23及更高版本

Google Play 服务库 9.0 及更高版本