我想通过Twitch在我的机器人上实现OAuth授权,当我在寻找更好的解决方案时,我发现了这个@GitHubBot。在这个bot中,要重定向URL,从Integrations.Telegram. for /github开始,我想知道如何像这样实现auth。如果您愿意的话,您能告诉您在电报机中实现OAuth的最佳实践吗?什么是更好的情况:授权代码还是隐式授权?
提前谢谢你!
发布于 2016-09-18 22:01:16
我有同样的想法,授权通过电报访问第三方服务,我有两个主要想法。受解释的深层链接用法启发
“授权的重定向URL用于web服务器的请求。这是用户在通过Google验证后重定向到的应用程序中的路径。该路径将附加授权代码进行访问。必须有协议。不能包含URL片段或相关路径。不能是公共IP地址。”
因此,这种方法动态唯一的重定向URI是一个失败的乞讨。
@BotSupport证实了我的假设:
合资公司,17.09.16 22:16我需要授权第三方服务的用户。例如,谷歌日历。因此,我决定创建一个简单的URI,它可以重定向到Service登录,并使用token\authCode将URL重定向到我的服务器。至于oauth没有对用户进行身份验证,我仍然需要确定到底是谁授予了对他的资源的访问权限。因此,我的下一个逻辑步骤是散列接收到的令牌,并通过ttps://telegram.me. my / bot ? code =xxx将其发送回用户。我确信,如果commandHandler for /code并且/code在bot命令列表中,我将能够打开与bot的对话,并通过web钩子将这些散列代码发送回我的服务器,以检测到底是谁在访问授权步骤。当我发现我的计划在最后一步被毁时,我感到震惊:据我所见,只有/start命令可以被触发。我的问题是:您能确认只有/start命令才能通过URL查询参数吗?如果是的话,你能给我一些关于授权和认证用户的正确方法的建议吗? Bot支持,20.09.16 01:50嗨,对不起。您正在谈论的是深度链接(https://core.telegram.org/bots#deep-linking),实际上,只有/start和/startgroup可以在那里使用。
最后,我成功地执行了用户授权\标识,但是在会话中间看到START按钮看起来非常奇怪。
简历:您不允许执行无声授权,就像在ttps://telegram.me. of /youtube或ttps://telegram.me.of/GitHubBot中所做的那样,但是您可以执行“足够接近”的沉默oauth授权版本
注意:就目前而言,我很难确切地知道机器人是如何实现的(youtube,GitHubBot),但是对于这个机器人来说,它应该是一个独特的后门,因为它们使用相同的方案重定向到ttps://integrations.telegram.org/youtube/oauth_redirect (至少,oauth服务的重定向URI不包含识别用户的唯一信息,就像我在这篇文章中描述的那样),也许有一种使用某些参数使auth唯一的方法,但据我所知,这是不允许的。
计划实现的步骤:
对不起,没有图片或链接,因为我没有名誉
发布于 2017-02-25 15:20:22
身份验证场景如下:
code参数您需要在bot中接收该代码,但不能仅仅重定向到bot的URL,因为它只接受start。这一点在@evasyuk的回答中得到了很好的描述。
我的解决方案是设置一个API端点,该端点将从服务接收带有auth代码的回调,并将其重定向到带有start参数的bot链接。以下是实现这一目标的基本步骤。
我假设您有一个AWS帐户,但如果没有,则很容易创建,您可以在一年内免费使用该解决方案:
API网关免费层包含每月100万次API调用,最多12个月。
code查询参数映射到start integration.request.querystring.start:"method.request.querystring.code“#不要忘记更改bot的用户名: uri:"bot”定义:空:类型:“对象”标题:“空模式”你已经准备好出发了。现在你可以编程你的机器人给用户一个链接到服务授权,比如说
https://some.service.com/auth?response_type=code&client_id=<your_client_id>&redirect_uri=https://abcdefghij.execute-api.eu-central-1.amazonaws.com一旦用户跟踪并登录,他将被发送到
https://abcdefghij.execute-api.eu-central-1.amazonaws.com/auth?code=<auth_code>它将被重定向到
https://telegram.me/my_bot?start=<auth_code>通常情况下,用户会回到他的电报应用程序,在那里他可以按下“开始”按钮。一旦他这样做了,bot将收到一条消息/start <auth_code> (但是代码不会出现在聊天历史记录中)。您的bot可以保存此代码并将其用于用户身份验证(获取令牌)。
https://stackoverflow.com/questions/37264827
复制相似问题