来自桌面应用程序的OAuth2身份验证代码

2024-10-03 21:34:26 发布

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

我的桌面应用程序和连接暴雪API时遇到一些问题。对于OAuth2,我知道我需要将用户重定向到一个网站,在那里他们为应用程序提供授权以代表他们访问数据。从那里,有一个重定向URL,其中包含必须交换为访问令牌的授权代码

我的应用程序是针对桌面的,所以我不确定如何从重定向URL获取授权代码。下面是我用于测试的一些代码:

if self._check_connection():
        self.client_id = os.getenv("BLIZZ_CLIENT_ID")
        self.client_secret = os.getenv("BLIZZ_CLIENT_SECRET")
        self.region = "us"
        state = "abcd1234"

        re = requests.get(f"{BLIZZ_AUTH_URL}?client_id={self.client_id}&response_type=code&redirect_uri={REPO_URL}&locale={self.region}&scope={SC2_SCOPE}&state={state}")

        re_url = re.url
        print(re_url)

fuller产品将使用webbrowser让用户授权我的应用程序,但我需要在单击“允许”后获得重定向URL中的代码。因此,我试图在最后一位获取URL,但当我将其打印到控制台进行检查时,它不包含授权代码。但是,如果单击它,它会在浏览器中打开正确的页面,其中包含验证代码

谢谢你花时间阅读,我看过互联网上的各种帖子,但大多数都是关于网络应用的,或者他们说了一些含糊不清的话,比如“获取授权码并交换”,但没有详细说明这实际上是如何工作的

有没有干净的方法可以做到这一点,而不需要用户从地址栏复制代码并粘贴到我的应用程序中?理想情况下,我希望通过编程方式获取它并从那里继续


Tags: 代码用户selfreclientid应用程序url
1条回答
网友
1楼 · 发布于 2024-10-03 21:34:26

由于您要求用户通过OAuth2提供程序授权应用程序,因此需要向OAuth2服务器传递正确的重定向uri

通常,它是指向将处理请求的web服务器的有效域。对于桌面应用程序(或移动应用程序),您将没有web服务器,因此您需要一个自定义协议来处理该响应并将其重定向到您的应用程序

例如,当您单击电子邮件地址超链接mailto:email@server.com时,协议mailto:会告诉浏览器将调用重定向到主机操作系统,并打开默认的邮件应用程序。这同样适用于大多数与Skype、Discord、Twitch等浏览器交互的应用程序

对于windows应用程序,您可以阅读此主题以获取指导:How do I register a custom URL protocol in Windows?

我们的想法是使用battle.net登录打开浏览器,但是重定向url将指向您的自定义协议,这样您的应用程序将收到一条包含完整url的消息,其中包括您需要的authorization_code

请注意,通过这样做,操作系统将启动应用程序的新实例,您必须使用某种消息传递系统/管道/套接字将数据从新实例重定向到当前正在运行的实例。要检测以前运行的应用程序,只需使用互斥锁即可

相关问题 更多 >