Max*_*Max 12 oauth telegram-bot
我想在我的机器人上通过Twitch API实现OAuth授权,当我在寻找更好的解决方案时,我找到了这个@GitHubBot.在这个bot重定向URL开始为integrations.telegram.org/github,我想知道如何实现这样的auth.如果您愿意,您能告诉最佳实践在电报机器人中实施OAuth吗?更好的情况是什么:授权码或隐含授权?
先感谢您!
lau*_*lic 13
我使用Telegram 深度链接和AWS API Gateway服务解决了这个问题。
认证场景是这样的:
code参数您需要在您的机器人中接收该代码,但您不能仅仅重定向到您机器人的 URL,因为它接受的唯一参数是start. 这在@evasyuk 的回答中有很好的描述。
我的解决方案是设置一个 AWS API Gateway 端点,该端点将接收带有来自服务的授权代码的回调,并将其重定向到带有start参数的机器人链接。以下是执行此操作的基本步骤。
我假设您有一个 AWS 账户,但如果没有,创建起来很容易,您可以完全免费使用此解决方案一年:
API Gateway 免费套餐包括每月 100 万次 API 调用,最长可达 12 个月。
前往控制台创建一个新的 API Gateway。您可以创建一个新的并按照步骤操作,或者您可以导入 Swagger 定义(不要忘记更改机器人 URL!):
---
swagger: "2.0"
info:
version: "2017-02-25T14:22:32Z"
title: "BotAuthRedirect"
schemes:
- "https"
paths:
/:
x-amazon-apigateway-any-method:
produces:
- "text/html"
parameters:
- name: "code"
in: "query"
required: false
type: "string"
responses:
200:
description: "200 response"
schema:
$ref: "#/definitions/Empty"
x-amazon-apigateway-integration:
type: "http"
httpMethod: "GET"
passthroughBehavior: "when_no_match"
responses:
default:
statusCode: "200"
requestParameters:
# This is where we map `code` query parameter to `start`
integration.request.querystring.start: "method.request.querystring.code"
# Don't forget to change your bot's username:
uri: "https://telegram.me/my_bot"
definitions:
Empty:
type: "object"
title: "Empty Schema"
Run Code Online (Sandbox Code Playgroud)按Actions > Deploy API,取一些 stage name,没关系
您将获得新创建的端点的链接,例如
https://<some_id>.execute-api.<region>.amazonaws.com/<stage>
Run Code Online (Sandbox Code Playgroud)
例如
https://abcdefghij.execute-api.eu-central-1.amazonaws.com/auth
Run Code Online (Sandbox Code Playgroud)你准备好了。现在你可以对你的机器人进行编程,为用户提供服务授权的链接,比如
https://some.service.com/auth?response_type=code&client_id=<your_client_id>&redirect_uri=https://abcdefghij.execute-api.eu-central-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)
一旦用户关注并登录,他将被发送到
https://abcdefghij.execute-api.eu-central-1.amazonaws.com/auth?code=<auth_code>
Run Code Online (Sandbox Code Playgroud)
这将被重定向到
https://telegram.me/my_bot?start=<auth_code>
Run Code Online (Sandbox Code Playgroud)
并且通常用户会回到他的 Telegram 应用程序,在那里他可以按“开始”按钮。一旦他这样做了,机器人就会收到一条消息/start <auth_code>(但代码不会出现在聊天记录中)。您的机器人可以保存此代码并将其用于用户身份验证(获取令牌)。
我有同样的想法授权通过Telegram访问第三方服务,我有两个主要想法.灵感来自解释深层链接用法:
"授权重定向URI用于来自Web服务器的请求.这是您的应用程序中用户在通过Google身份验证后重定向到的路径.该路径将附加授权代码以进行访问.必须具有协议.不能包含URL片段或相对路径.不能是公共IP地址."
因此,这种方法动态唯一重定向URI是一个失败的乞讨.
@BotSupport确认了我的假设:
JV,[17.09.16 22:16]我需要在第三方服务上授权用户.例如,Google日历.所以,我决定创建一个简单的URI,重定向到服务登录并使用token\authCode将URL重定向到我的服务器.至于oauth没有对用户进行身份验证,我仍然需要以某种方式确定谁准确授予了对其资源的访问权限.所以我的下一个逻辑步骤是散列收到的令牌并通过ttps将其发送给用户://telegram.me/BOT?code = xxx我确信如果有/ code的commandHandler和/ code在bot命令列表中我可以打开与我的机器人的对话,并通过webhook将这个散列的代码发送回我的服务器,以便检测访问授权步骤中究竟是谁.当我发现我的计划在最后一步被破坏时,我感到震惊:据我所知,只有/ start命令可以被触发.我的问题是:你能确认只有/ start命令可以通过URL查询参数吗?如果是这样,你能给我一些关于授权和认证用户的正确方法的建议吗?
机器人支持,[20.09.16 01:50]嗨,对不起等待.您正在谈论深度链接(https://core.telegram.org/bots#deep-linking),实际上,只有/ start和/ startgroup可以在那里使用.
最后,我能够执行成功的用户授权\识别,但在对话中间看到START按钮看起来很奇怪.
简历:您不能像在ttps://telegram.me/youtube或ttps://telegram.me/GitHubBot中那样执行静默授权,但您可以执行"足够接近"的静默oauth授权版本
注意:目前我很难说出机器人是如何实现的(youtube,GitHubBot),但它应该是这个机器人的一些独特的后门,只要他们重定向到ttps://integrations.telegram.org/youtube/oauth_redirect具有相同的方案(至少,来自oauth服务的重定向URI不包含识别用户的唯一信息,就像我在本文中描述的那样)也许,有一种方法可以使用某些参数使auth URL唯一,但据我所知,这是不允许的.
计划实施的步骤:
对不起,没有图片或链接,因为我没有声誉
| 归档时间: |
|
| 查看次数: |
8465 次 |
| 最近记录: |