创建客户端id并使用OAuth注册帐户

创建客户端id并使用OAuth注册帐户,oauth,oauth-2.0,api-design,Oauth,Oauth 2.0,Api Design,当授权用户使用第一方移动应用程序API时,我发送以下请求: localhost:5000/oauth/token?客户端id=9QFBZD4UDTGFYO0U5U9KZX2IUZBDCjdraqutfrk&grant\u type=password&username=MyUsername&password=MyPassword 问题是我需要已经创建了一个帐户以及一个可用的客户id 我的问题是,当用户下载我的应用程序时,我应该如何向我的API发送请求以创建客户端记录(这需要用户创建,因为我有一个外

当授权用户使用第一方移动应用程序API时,我发送以下请求:

localhost:5000/oauth/token?客户端id=9QFBZD4UDTGFYO0U5U9KZX2IUZBDCjdraqutfrk&grant\u type=password&username=MyUsername&password=MyPassword

问题是我需要已经创建了一个帐户以及一个可用的客户id


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

当任何客户端安装您的应用程序时,您可以让客户端先注册到应用程序中。当客户端注册时,它将命中一个API,您必须在系统中创建客户端详细信息。客户机注册后,您可以允许他登录并继续进行令牌身份验证


用户可以注册到您的应用程序中,也可以使用第三方登录(如Facebook或Google)注册到系统中,前提是您的应用程序信任这些身份提供商

好的,您在这里使用的是
password
grant类型,这意味着用户理解并信任您的oauth服务器,并将用户名/密码传递给它。另一件事是,客户端id对于每个用户、它的id和用户将要使用的应用程序的id不是唯一的,所以是的,它通常在集成客户端应用程序和授权服务器时获得一次


我相信你应该看看
授权\u code
授权类型。

阅读答案和评论,如果你也为此实现了自定义后端,那么发送这个不是更好吗

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

要解决spambot问题,可以使用机器人验证器,其中某些失败的尝试将用户踢出并删除临时用户obj,或者让后端向其接收的电子邮件地址发送验证电子邮件,以确保电子邮件有效

如果您希望/需要在url中使用客户端id+用户+密码的原因与您的问题类似,您可以在何处进行多重检查

  • 客户端id是新的或已存在
  • 用户名存在
  • 从那里,仍然将他们发送到注册页面并填写新用户(如果有),或者预先填写他们指定的用户和密码


    为了增加安全性,我建议您在发出请求之前对用户密码进行加密,否则它可能会被数据包窥探者截获,因此基本上我应该在没有OAuth的情况下公开API,以便在数据库中创建客户端记录,然后从那里开始,允许用户访问注册?ouath仅用于保护您不希望未经授权的用户访问的某些信息。因此,只要使用oauth保护您的重要信息,该API将受到令牌的保护。但就注册而言,是的,您可以让用户提供注册凭据,否则您无法知道谁是有效用户。我们不会手动添加用户,因为这会限制系统可以获得的用户数量。我明白了,如果有人对我的私有API进行反向工程,并用大量垃圾邮件用户填充我的数据库,是否也会出现安全问题?我认为Oauth无法解决这一问题。使用oauth寻求的安全性只能保护某些公共API背后的私有数据。除此之外,如果你想摆脱一些其他问题,还有其他方法。但是oauth肯定会解决您的一个问题。唯一将打开的api用于注册,其他什么都没有,因此没有人可以进入保护安全数据的api。授权码授予类型的唯一问题是,我必须重定向到其他页面以确认请求,这很奇怪,因为这是我自己的api。实施密码授予不是更好吗?我知道每个移动应用程序实例的客户端id也是唯一的,但是,我不知道如何确保在我没有访问令牌的情况下创建帐户或登录,因为我需要电子邮件和密码凭据,所以您可以使用密码授权,但您不会忽略创建帐户:)正如您所写,在每个请求上创建新帐户可能会很危险。但是你可以重定向到你自己的“授权”页面+在那里注册用户+在电子邮件上确认等。也许你应该提供更多关于你的用例的细节,这样会更容易提供帮助。