电报bot-OAuth授权

电报bot-OAuth授权,oauth,telegram-bot,Oauth,Telegram Bot,我想通过Twitch API在我的机器人上实现OAuth授权,当我在寻找更好的解决方案时,我发现了这个@GitHubBot。在这个bot重定向URL中,从integrations.telegram.org/github开始,我想知道如何像这样实现auth。若你们愿意,你们能告诉我在电报机器人程序中实现OAuth的最佳实践吗?哪种情况更好:授权码还是隐式授权? 提前谢谢你 我有同样的想法,授权通过电报访问第三方服务,我有两个主要想法。 灵感来源于: 第一个想法是创建具有唯一重定向URI的唯一授权

我想通过Twitch API在我的机器人上实现OAuth授权,当我在寻找更好的解决方案时,我发现了这个@GitHubBot。在这个bot重定向URL中,从integrations.telegram.org/github开始,我想知道如何像这样实现auth。若你们愿意,你们能告诉我在电报机器人程序中实现OAuth的最佳实践吗?哪种情况更好:授权码还是隐式授权?

提前谢谢你

我有同样的想法,授权通过电报访问第三方服务,我有两个主要想法。 灵感来源于:

  • 第一个想法是创建具有唯一重定向URI的唯一授权URL。 不幸的是,当我在谷歌控制台中设置凭据时,我错过了关于重定向URI的解释。上面说
“用于web服务器请求的授权重定向URI。 这是应用程序中用户重定向到的路径 在他们通过谷歌认证后。路径将被追加 具有访问权限代码。必须具有协议。无法 包含URL片段或相对路径。不能是公共IP 地址。”

因此,这种动态唯一重定向URI的方法是一个失败的乞讨

  • 第二种方法是访问资源,然后将哈希授权结果直接发送给bot。 预计会是这样的: ttps://telegram.me/bot?hashed_code=code 但是,不幸的是,我发现这也没有按计划进行。 我真的很失望这个事实,但经过一些偷偷摸摸,我发现通过直接URL向您的机器人传递参数的唯一方法是/start命令
@BotSupport证实了我的假设:

JV,[17.09.16 22:16]我需要授权第三方服务的用户。 例如,谷歌日历。所以,我决定创建一个简单的URI 重定向到服务登录并将URL重定向到我的服务器 令牌\authCode。只要oauth不认证用户,我仍然 需要以某种方式确定到底是谁授权访问他的资源。所以 我的下一个逻辑步骤是散列接收到的令牌并将其发送回服务器 用户通过ttps://telegram.me/BOT?code=xxx 我确信如果 bot命令中有/code和/code的commandHandler 列表我将能够打开与我的机器人的对话并发送此 通过webhook将哈希代码返回到我的服务器以检测谁 正是在访问授权步骤。当我发现这一点时,我感到震惊 我的计划在最后一步被破坏了:据我所知,只有 /启动命令可能被触发。我的问题是:你能证实吗 只有/start命令才能通过URL查询参数?如果是的话,我可以 你给我一些关于授权和授权的正确方法的建议 验证用户

机器人支持,[20.09.16 01:50]您好,很抱歉等待。你在说话 关于深度链接()和, 实际上,这里只能使用/start和/startgroup

最后,我成功地完成了用户授权-身份识别,但是在会话中间看到启动< /强>按钮看起来很奇怪。 恢复:不允许像在中那样执行静默授权ttps://telegram.me/youtube 或ttps://telegram.me/GitHubBot,但您可以执行“足够接近”版本的静默oauth授权

注意:现在我很难说这些机器人是如何实现的(youtube、GitHubBot),但这应该是这些机器人重定向到的唯一后门ttps://integrations.telegram.org/youtube/oauth_redirect 同样的计划(至少,来自oauth服务的重定向URI不包含标识用户的唯一信息,正如我在本文中描述的情况) 也许,有一种方法可以使用某些参数使auth URL唯一,但据我所知,这是不允许的

方案实施步骤:

  • 设置webhook
  • 添加oauth_cb端点
  • 在例如Google控制台中获取应用程序的凭据
  • 等待对oauth\u cb端点的回调
  • 对步骤4中的授权代码进行哈希
  • 将哈希和身份验证代码另存为键值对
  • 使用5中的哈希创建重定向到您的bot的URL
  • 生成包含来自7的重定向URL的HTML
  • 使用参数将8实际重定向到您的bot
  • 为/start命令编写需要内联参数的解析器
  • 使用/start命令等待webhook
  • 使用6中的键值对标识用户
  • 删除键值对
  • 你太棒了!现在你可以访问一些用户数据了
  • 很抱歉,没有图片或链接,因为我没有声誉

    我用和服务解决了这个问题

    身份验证场景如下所示:

  • bot会告诉用户打开指向服务的链接并登录
  • 服务重定向到您设置的URL:即,向该URL发送请求,其中包含OAuth代码作为
    code
    参数
  • 您需要在您的bot中接收该代码,但您不能只重定向到bot的URL,因为它接受的唯一参数是
    start
    。这在@evasyuk的回答中有很好的描述

    我的解决方案是设置一个AWS API网关端点,该端点将从服务接收带有身份验证代码的回调,并使用
    start
    参数将其重定向到bot的链接

    我假设您有一个AWS帐户,但如果没有,则很容易创建,并且您可以免费使用此解决方案一年:

    API网关免费层包括每月一百万次API调用,最长持续12个月

  • 转到控制台。您可以创建一个新的并按照步骤操作,也可以导入招摇过市定义(不要忘记更改机器人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"
    https://<some_id>.execute-api.<region>.amazonaws.com/<stage>
    
    https://abcdefghij.execute-api.eu-central-1.amazonaws.com/auth
    
    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>