Line 第三方登录 后台

line开发网址

line开发文档

认证和授权的过程是建立在 OAuth2.0 和 OpenId Connect 基础上

具体的过程见 Integrating Line Login


1、先去开发网址注册你的app应用

Created a channel for your application

得到 Channel ID 和 Channel secret


2、配置你的应用

在Redirect settings中的callback URL中填写登录成功后要跳转的页面


3、

你可以请求 用line登陆你app的用户 授予你app获取他们email地址的权利

因此首先你要在line的控制台设置“提交,还要上传你使用的缘由


4、完成一个验证请求

去验证用户的身份,验证你app的请求权限,

要将用户带着参数重定向到一下授权URL,

你可以重定向用户通过一个 line登陆按钮 或者用一个重定向链接

https://access.line.me/oauth2/v2.1/authorize

URL中需要包括一下参数:

参数类型是否必须描述
response_typeString必须code,告诉line去但会一个授权码
client_idString必须Channel ID
redirect_urlString必须回调URL,登录成功后的跳转URL,可以再line控制台设置
stateString必须你的代码随机生成的字符串,避免跨站请求伪造
scopeString必须用户授予权限,你可以使用URL编码空格字符(%20)来指定多个范围,参考范围
nonceString选择一个用于防止重复攻击的字符串,这个值通过ID token返回。
promptString选择确认。用于强制显示同意授权页面,即使用户已经授予全部权限
bot_promptString选择在登录过程中,显示一个选项去添加一个bot(bot像广告app的那种感觉,在最下方出现一条广告下载)

5、范围

下列范围可以用在scope参数中

profile:允许得到用户的概要信息

openid:用于检索一个ID token

email:允许得到用户的email地址,openid也必须同时指定。


在建立user和bot的时候,access token和profile范围是必须的。


验证请求的例子:

https://access.line.me/oauth2/v2.1/authorize?response_type=code&client_id=1234567890&redirect_uri=https%3A%2F%2Fexample.com%2Fauth&state=12345abcde&scope=openid%20profile&nonce=09876xyz

https://access.line.me/oauth2/v2.1/authorize

?response_type=code

&client_id=1234567890

&redirect_uri=https%3A%2F%2Fexample.com%2Fauth

&state=12345abcde

&scope=openid%20profile

&nonce=09876xyz


6、验证和授权的过程

在你app点击用line登录--跳转到line的页面--等用户同意授权


接受授权码

一旦用户授权了完成,HTTP status code 302,在回调函数中给你下面的参数:

参数类型描述
codeString授权码得到一个access token,验证时间为10分钟,号码只能用一次
stateStringstate参数包括原始验证请求时的URL。你的应用应该验证这个值是否和原始的请求匹配
friendship_status_changedBoolean

true=user和bot之间的关系在登录中改变。false则相反。

这个值只有在bot_prompt请求的时候才会返回。

例如
HTTTP/1.1 302 Found
Location : https://client.example.org/cb?code=abcd1234&state=0987poi&friendship_status_changed=true

HTTTP/1.1 302 Found

Location : https://client.example.org/cb?

code=abcd1234

&state=0987poi

&friendship_status_changed=true


ERROR响应

参数类型是否必须描述
errorString必须Error code
error_descriptionString选择人类可读的ASCII编码的文本描述的错误。
stateString选择OAuth 2.0状态值。如果需要授权请求包括状态参数。

例子

https://example.com/callback?error=access_denied&error_description=The+resource+owner+denied+the+request.&state=0987poi

https://example.com/callback?error=access_denied

&error_description=The+resource+owner+denied+the+request.

&state=0987poi


得到一个access token

请求

POST https://api.line.me/oauth2/v2.1/token

Request header 请求头描述
Content-Typeapplication/x-www-form-urlencoded

Request Body 请求体

参数类型是否必须描述
grant_typeStringauthorization_code,指定授权类型
codeStringAuthorization code
redirect_uriStringCallback URL
client_idStringChannel ID 
client_secretStringChannel secret

curl -X POST https://api.line.me/oauth2/v2.1/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-d 'grant_type=authorization_code' \
-d 'code=xxx' \
-d 'redirect_uri=xxx' \
-d 'client_id=xxx' \
-d 'client_secret=xxx'


Response响应

Property类型描述
access_tokenStringAccess token 有效期30天
expires_inNumber以秒为单位的时间,直到访问令牌到期。
id_tokenStringJSON Web标记(JWT)包含关于用户的信息。这个字段中指定返回只有openid范围。有关更多信息,请参见ID标记。
refresh_tokenString令牌用于获取一个新的访问令牌。有效直到访问令牌到期后10天。
scpoeString用户权限授予。然而,电子邮件的范围不是作为值返回属性即使被授予许可范围。
token_typeString持票人

例子

{
    "access_token": "bNl4YEFPI/hjFWhTqexp4MuEw5YPs...",
    "expires_in": 2592000,
    "id_token": "eyJhbGciOiJIUzI1NiJ9...",
    "refresh_token": "Aa1FdeggRhTnPNNpxr8p",
    "scope": "profile",
    "token_type": "Bearer"
}


ID tokens

Headers

{
  "alg": "HS256"
}


Payload用户信息可以再payload 中找到

{
    "iss": "https://access.line.me", 
    "sub": "U1234567890abcdef1234567890abcdef ",
    "aud": "1234567890", 
    "exp": 1504169092, 
    "iat": 1504263657, 
    "nonce": "0987654asdf", 
    "name": "Taro Line", 
    "picture": "https://sample_line.me/aBcdefg123456", 
}









  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值