脱机Python脚本中的OAuth和redirect\u uri

2024-06-01 09:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在尝试编写一个Python脚本,它将使用Deviantart的API来自动调整我最喜欢的内容。为此,我需要先在脚本中登录。Deviantart使用OAuth2身份验证,这需要重定向的uri,据我所知,它应该是运行我的应用程序的服务器。在

不过,我在我的计算机上(不是在服务器上)本地运行脚本,并通过Python的Requests库发送http请求。当OAuth过程将身份验证令牌所需的代码作为GET调用的参数发送到重定向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)

打印的响应只是一个200http代码,而不是一个访问令牌(显然,因为用户名和密码在任何地方都没有输入)。请求被发送到DA的授权页面,但是由于页面本身并没有在我的脚本中打开,所以我无法输入用户名和密码登录任何地方。而且我也不能直接在GET请求中发送用户名和密码来进行身份验证(同样明显,这样发送密码是个糟糕的主意)。在

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

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

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


Tags: 代码用户服务器脚本身份验证密码getos
2条回答

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

请参阅https://www.deviantart.com/developers/authentication(“使用授权码授权”一节)。在

如果应用程序处于脱机状态,则不能使用授权代码或隐式授予类型:两个流都需要重定向URI。在

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

您的应用程序必须可以从Internet访问。在

相关问题 更多 >