2016-09-10 39 views
2

我有一个终端API,我正在使用由discoveryapis_generator生成的Dart客户端库访问。除了生成的库似乎不反映我的API的身份验证要求以外,一切都很好。如何使用discoveryapis_generator为我的Google Cloud Endpoints API生成Dart客户端库?

是否只需要以某种方式创建一个已验证的http对象以传递到我的应用程序的BrowserClient()构造函数的以下行中?

my_api = new MyApi(new BrowserClient()); 

是用于创建认证http对象作为描述here使用googleapis_auth包推荐的方法?我在正确的轨道上吗?

回答

2

身份验证不是API本身的一部分。实际上,http客户端会发送用于用户认证的正确的http头。假设您使用标准的谷歌认证机制,您可以像使用标准Google API(Drive等)那样使用包https://pub.dartlang.org/packages/googleapis_auth

你必须创建一个clientId(谷歌控制台),并使用BrowserOAuth2Flow得到一个AuthClient(扩展http.client),从此做new MyApi(authClient)

我有一个(很旧的)项目中,我重写谷歌认证的标准行为,允许指定一个userId(从来没有真正找到的文件,但它的工作原理)认证过程中的一个简单的例子,使用PlusApi获取用户名,但它可以以类似的方式为您自己的API工作。也许这可以帮助https://github.com/alextekartik/tekartik_googleapis_auth.dart

我觉得你叫createImplicitBrowserFlow

时至少需要email范围也有样品使用谷歌的API,可以帮助:https://github.com/dart-lang/googleapis_examples

+0

感谢。按照为Web应用程序创建经过身份验证的HTTP客户端的说明进行操作。这很容易。使用Plus API寻找名字很有趣。我没有想到这一点。确实需要电子邮件范围:'var scopes = ['https://www.googleapis.com/auth/userinfo.email'];' –

+0

我发现使用IAM控制台中列出的电子邮件地址作为项目成功进行身份验证或App Engine管理员不足以使我的终端服务中的'users.is_current_user_admin()'调用返回True。所以我想知道这需要什么神奇的OAuth咒语。 –

+0

作为上述解决方法,我维护服务模块中的管理员电子邮件地址列表。幸运的是,'endpoints.get_current_user()'调用成功,以检查返回的'user.email()'列表。我想不出有任何真正的安全隐患。 –

相关问题