脱机Python脚本中的OAuth和redirect_uri

时间:2016-10-04 17:06:00

标签: python oauth oauth-2.0 deviantart-api

我目前正在尝试编写一个Python脚本,该脚本将使用Deviantart的API自动调整我的收藏夹。为此,我需要先在我的脚本中登录。 Deviantart使用OAuth2身份验证,这需要一个redirect_uri,据我所知,它应该是我的应用程序运行的服务器。

但是我在我的计算机上本地运行脚本(而不是在服务器上),只是通过Python的Requests库发送http请求。当OAuth过程将身份验证令牌所需的代码作为GET调用redirect_uri的参数发送时,我该如何进行身份验证,这对我来说无处可寻?没有运行服务器,是否无法进行身份验证?

修改

我的问题仍然是我正在运行一个简单的脱机脚本,而且我不确定如何通过它进行身份验证。

到目前为止,这是我的验证码:

import binascii, os, requests

def auth():
    request = 'https://www.deviantart.com/oauth2/authorize'
    state = binascii.hexlify(os.urandom(160))
    params = {
        'response_type': 'token',
        'client_id': 1,
        'redirect_uri': 'https://localhost:8080',
        'state': state,
        'scope': 'user'
    }
    r = requests.get(request, params)
    print(r)

打印的响应只是一个200 HTTP代码,而不是访问令牌(显然,因为没有在任何地方输入用户名和密码)。请求被发送到DA的授权页面,但由于页面本身实际上没有在我的脚本中打开,我无法输入我的用户名和密码来登录任何地方。而且我无法直接在GET请求中发送用户名和密码来验证这种方式(再次显然,因为发送密码是一个糟糕的主意)。

最好我想让用户(我)在脚本运行的控制台中提示输入用户名和密码,然后在用户成功登录后继续执行脚本。

或者,如果无法执行上述操作,脚本应在浏览器中打开授权网页,然后在用户登录后继续执行。

我如何在Python中实现这两个解决方案中的任何一个?

2 个答案:

答案 0 :(得分:1)

您应该使用收到的代码获取授权令牌。此令牌将用于之后访问DeviantArt。

请参阅https://www.deviantart.com/developers/authentication("使用授权码授予")。

答案 1 :(得分:1)

如果您的应用程序处于脱机状态,则无法使用授权代码和隐式授权类型:两个流都需要重定向URI。

由于无法从Internet访问您的python脚本,并且因为Deviantart不允许使用其他授权类型(客户端凭据除外,但在您的情况下不相关),因此您将无法发出任何访问令牌

您的申请必须可从互联网访问。