2017-01-02 54 views
2
账号

当授权用户对第一方的移动应用程序的API,我发送以下请求:创建的client_id和注册使用OAuth

localhost:5000/oauth/token?client_id=9qFbZD4udTgFVYo0u5U9kZX2iuzbdcJDRAquTfRk&grant_type=password&username=MyUsername&password=MyPassword

这样做的问题是,我需要已经有创建的帐户以及可用的client_id。

我的问题是,当用户下载我的应用程序时,我应该如何向我的API发送一个请求来创建客户端记录(这需要用户创建,因为我有一个将客户端链接到用户ID的外键)和用户记录在我的数据库,因为没有授权令牌?谢谢。

回答

0

当任何客户端安装应用程序,你可以先让客户寄存器到应用程序中。当客户端注册时,它会碰到必须创建客户端详细信息到系统中的API之一。客户端注册后,您可以允许他登录并继续进行令牌认证。

用户可以注册到你的应用或使用第三方登录Facebook或谷歌用于注册到系统提供的应用程序信任这些身份提供者。

+0

所以基本上我应该有我的API暴露在外的OAuth在我的数据库中创建一个客户记录,然后从中获取狙击前那里,允许用户访问注册? –

+0

最后只是为了保护一些您不希望未经授权的用户访问的信息。因此,只要您使用oauth保护您的重要信息,API将受到令牌的保护。但就注册而言,您可以让用户提供注册凭证,否则无法知道谁是有效用户。我们不会手动添加用户,因为它会限制系统可以获得的用户数量。 –

+0

对,我看到了,是否有人会出现安全问题,有人反向工程我的私人API,并填充我的数据库与大量的垃圾邮件用户? –

2

好了,你在这里使用password交付式,这意味着用户了解和信任您的OAuth服务器,并通过用户名/密码给它。其他的事情是,client_id不是唯一的每个用户,它的和应用程序的用户将使用的id,所以是的 - 它通常在集成客户端应用程序和授权服务器期间得到一次。

我相信你应该看看authorization_code交付式。

+0

授权码授权类型唯一的问题是我必须重定向到不同的页面来确认请求,这很奇怪,因为这是我自己的API。实施密码授权不是更好吗?我知道client_id对于每个移动应用程序实例都是唯一的,但是我不知道如何确保创建帐户或在没有access_token时登录,因为我需要电子邮件和密码凭据来执行此操作。 –

+0

您可以使用密码授权但你不会忽略创建一个帐户:)因为你写的每个请求只是创建一个新的帐户可能是危险的。但是你可以重定向到你自己的“授权”页面+在那里注册用户+在电子邮件等上确认。也许你应该把你的用例的更多细节,所以它会更容易帮助。 – freakman

0

从阅读了对答案和评论,如果您也实现了这一个自定义的后端,岂不是更好,如果你只是发送吗?

localhost:5000/oauth/token?client_id=9qFbZD4udTgFVYo0u5U9kZX2iuzbdcJDRAquTfRk 

从这里开始,在您的后端,只需要一个存储此令牌的用户表并检查是否存在匹配的令牌。如果没有,则创建一个新的用户对象并让用户填写相应的响应(电子邮件,密码等)以完成注册。

要解决spambot问题,要么有机器人验证程序,某些失败的尝试会将用户踢出并删除temp用户obj,或让后端向收到的电子邮件地址发送验证电子邮件,以确保电子邮件已验证。

如果你想做/原因需要在您的网址在你的问题使用的client_id +用户+密码一样,可以做多检查,其中

  1. CLIENT_ID是新的或已存在
  2. 用户名存在

从那里还是将它们发送到注册页面并填写新的用户,如果它是采取或预先填写用户名和密码,他们指定

为了增加安全性,我建议你争我夺用户的密码,您作出这样的请求,或者它可以通过分组窥探者