login-with, 带有microservice的OAuth无状态登录

分享于 

12分钟阅读

GitHub

  繁體 雙語
Stateless login-with microservice for OAuth
  • 源代码名称:login-with
  • 源代码网址:http://www.github.com/lipp/login-with
  • login-with源代码文档
  • login-with源代码下载
  • Git URL:
    git://www.github.com/lipp/login-with.git
    Git Clone代码到本地:
    git clone http://www.github.com/lipp/login-with
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/lipp/login-with
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Build StatusCoverage Status

    用于"登录方式"功能的无状态身份验证 microservice,支持:

    • Twitter
    • GitHub
    • Reddit
    • Facebook
    • 谷歌
    • LinkedIn
    • Instagram
    • 混音器
    • Strava
    • 。更多信息( 欢迎使用)

    你可以使用 now 或者 Docker ( 对于强制和可选的环境变量,请参见下面的) 部署。

    $ now lipp/login-with
    $ docker run lipp/login-with

    这里microservice必须在你的子站点 比如 login.yourdomain.com 中运行。

    <ahref='https://login.yourdomain.com/twitter?success=ON_SUCCESS_URL&failure=ON_FAILURE_URL'>
     Login with Twitter
    </a>

    成功登录时,将创建两个 Cookies:

    • jwt - 包含配置文件信息和相应访问令牌( Twitter/etc )的"json网络令牌"( JWT )。 仅 http !
    • profile - 包含非敏感信息( 可以从浏览器JS访问)的JSON字符串:
      • username - string/强制,帐户特定用户别名( 比如。 Twitter 名称)
      • photo - string/可选,帐户特定的用户映像链接
      • name - string/可选,"真实"名称

    Cookies 将可以用于顶级域和所有子域。 另外,设置了cookie标志的secure,这意味着你的其他网站/web webservices必须在 https 上运行。

    支持

    如果你想在你的应用中轻松添加令牌,可以自由地查看auth0的sdk和在 auth0.com/overview的上免费计划Auth0 logo

    设置

    配置是通过 环境变量 来完成的。

    强制 环境变量

    • LW_SESSION_SECRET - microservice使用的会话密钥
    • LW_JWT_SECRET - 对JSON网络令牌进行签名的密钥( JWT )
    • LW_SUBDOMAIN - 这里microservice运行的子域,比如 login.yourdomain.com。 所有其他子域( 比如。api.yourdomain.com ) 和顶级( 比如 )。 yourdomain.com )

    可选 环境变量

    • LW_COOKIE_MAXAGE - 存储cookie的最大期限,默认值为 10天
    • LW_PROFILE_COOKIENAME - 配置文件名称的cookie,默认为 profile
    • LW_JWT_COOKIENAME - 令牌cookie名称的JSON网络( JWT ),默认为 jwt
    • LW_DYNAMIC_SCOPE - 当设置允许你自定义身份验证请求中使用的范围时,默认为关闭
    • LW_COOKIE_DOMAIN - 显式cookie域,比如 .foo.com。 如果未指定,则将从 LW_SUBDOMAIN 派生,如果为,则将cookie域"默认值"derive到 .foo.com。 除非你有( LW_SUBDOMAIN=dev.login.foo.com )的多级子域,否则这。 在这种情况下,必须显式地将 LW_COOKIE_DOMAIN=.foo.com 设置为 .login.foo.com 将是自动猜测的值。

    特定的环境变量

    你需要创建自己的GitHub OAuth应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/github/callback

    • LW_GITHUB_CLIENTID - 你的GitHub客户端标识
    • LW_GITHUB_CLIENTSECRET - 你的GitHub客户端密钥

    Google特定 环境变量

    你需要创建自己的Google OAuth应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/google/callback

    • LW_GOOGLE_CLIENTID - 你的Google客户端标识
    • LW_GOOGLE_CLIENTSECRET - 你的Google客户端密钥

    特定的环境变量

    你需要创建自己的Facebook登录应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com 允许重定向必须是: https://login.yourdomain.com/facebook/callback

    • LW_FACEBOOK_APPID - 你的Facebook APP ID
    • LW_FACEBOOK_APPSECRET - 你的Facebook应用程序密钥

    特定的环境变量

    你需要创建自己的LinkedIn OAuth2应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/linkedin/callback

    • LW_LINKEDIN_CLIENTID - 你的Google客户端标识
    • LW_LINKEDIN_CLIENTSECRET - 你的Google客户端密钥

    特定的环境变量

    你需要创建自己的GitHub OAuth应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/reddit/callback

    • LW_REDDIT_CLIENTID - 你的Reddit客户机 ID
    • LW_REDDIT_CLIENTSECRET - 你的Reddit客户端密钥

    Twitter 特定 环境变量

    你需要创建自己的Twitter OAuth应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/twitter/callback

    • LW_TWITTER_CONSUMERKEY - 你的Twitter 使用者密钥
    • LW_TWITTER_CONSUMERSECRET - 你的Twitter 使用者密钥

    混频器特定 环境变量

    你需要创建自己的混音器OAuth客户端。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/mixer/callback

    • LW_MIXER_CLIENTID - 你的混音器客户端 ID
    • LW_MIXER_CLIENTSECRET - 你的混音器客户端密钥
    • LW_MIXER_SCOPE - 指定使用混音器的授权请求范围。 检查混音器的文档,了解范围。

    Instagram 特定 环境变量

    你需要创建自己的Instagram OAuth应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/instagram/callback

    • LW_INSTAGRAM_CLIENTID - 你的Instagram 客户端 ID
    • LW_INSTAGRAM_CLIENTSECRET - 你的Instagram 客户端密钥

    Strava特定 环境变量

    你需要创建自己的Strava OAuth应用程序。 如果 LW_SUBDOMAIN=login.yourdomain.com的授权回调URL必须为: https://login.yourdomain.com/strava/callback

    • LW_STRAVA_CLIENTID - 你的Strava客户端 ID
    • LW_STRAVA_CLIENTSECRET - 你的Strava客户端密钥
    端点
    • /twitter - 使用 Twitter 帐户登录( 如果通过环境变量配置)
    • /facebook - 用Facebook帐户登录( 如果通过环境变量配置)
    • /github - 使用GitHub帐户登录( 如果配置了环境变量)
    • /google - 用Google帐户登录( 如果通过环境变量配置)
    • /reddit - 使用voiceover帐户登录( 如果通过环境变量配置)
    • /mixer - 使用混频器帐户登录( 如果通过环境变量配置)
    • /linkedin - 使用LinkedIn帐户登录( 如果通过环境变量配置)
    • /instagram - 使用 Instagram 帐户登录( 如果通过环境变量配置)
    • /strava - 使用Strava帐户登录( 如果通过环境变量配置)
    • /logout - 注销并清除相应的Cookies

    所有端点都期望查询参数:

    • success 在成功登录时重定向到的url ( 使用 encodeURIComponent 进行正确转义)
    • failure 在登录失败时重定向到的url ( 使用 encodeURIComponent 进行正确转义)

    别忘了把 encodeURIComponent 放在上面。

    测试

    假设你已经将 login-with 容器部署到:

    • 正确的环境变量
    • 正确配置的服务( 比如。Twitter 回调)
    • auth.your-domain.com 上通过https服务

    然后你可以通过浏览器和浏览器来测试你的登陆策略 https://auth.your-domain.com/twitter 如果成功,你将最终重定向并将配置文件的内容视为 JSON。 如果出现错误,错误将显示为 JSON。

    示例

    访问 login-with.com。源代码在这里是

    扩展部署

    注:你需要一个来运行这个 microservice。 Chrome ( 也许其他浏览器) 显式防止在. now. false上使用通配符 Cookies,这对于这个microservice是必需的。

    • 为 环境变量 创建你的秘密
    • 部署,使用的比如 现在已经启动
    now lipp/login-with 
     -e NODE_ENV=production 
     -e LW_SUBDOMAIN=login.yourdomain.com 
     -e LW_SESSION_SECRET=@lw-session-secret 
     -e LW_JWT_SECRET=@lw-token-secret 
     -e LW_REDDIT_CLIENTID=@lw-reddit-clientid 
     -e LW_REDDIT_CLIENTSECRET=@lw-reddit-clientsecret 
     -e LW_GITHUB_CLIENTID=@lw-github-clientid 
     -e LW_GITHUB_CLIENTSECRET=@lw-github-clientsecret 
     -e LW_TWITTER_CONSUMERKEY=@lw-twitter-consumerkey 
     -e LW_TWITTER_CONSUMERSECRET=@lw-twitter-consumersecret 
     -e LW_INSTAGRAM_CLIENTID=@lw-instagram-clientid 
     -e LW_INSTAGRAM_CLIENTSECRET=@lw-instagram-clientsecret 
     --alias login.yourdomain.com
    使用进行的扩展部署
    • 为 环境变量 创建你的秘密
    • 部署,比如 与 Docker
    docker run lipp/login-with -p 80:3000 
     -e NODE_ENV=production 
     -e LW_SUBDOMAIN=login.yourdomain.com 
     -e LW_SESSION_SECRET=@lw-session-secret 
     -e LW_JWT_SECRET=@lw-token-secret 
     -e LW_REDDIT_CLIENTID=@lw-reddit-clientid 
     -e LW_REDDIT_CLIENTSECRET=@lw-reddit-clientsecret 
     -e LW_GITHUB_CLIENTID=@lw-github-clientid 
     -e LW_GITHUB_CLIENTSECRET=@lw-github-clientsecret 
     -e LW_TWITTER_CONSUMERKEY=@lw-twitter-consumerkey 
     -e LW_TWITTER_CONSUMERSECRET=@lw-twitter-consumersecret 
     -e LW_INSTAGRAM_CLIENTID=@lw-instagram-clientid 
     -e LW_INSTAGRAM_CLIENTSECRET=@lw-instagram-clientsecret 

    STA  STAT  log  micr  Oauth  State  
    相关文章