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_type | String | 必须 | code,告诉line去但会一个授权码 |
client_id | String | 必须 | Channel ID |
redirect_url | String | 必须 | 回调URL,登录成功后的跳转URL,可以再line控制台设置 |
state | String | 必须 | 你的代码随机生成的字符串,避免跨站请求伪造 |
scope | String | 必须 | 用户授予权限,你可以使用URL编码空格字符(%20)来指定多个范围,参考范围 |
nonce | String | 选择 | 一个用于防止重复攻击的字符串,这个值通过ID token返回。 |
prompt | String | 选择 | 确认。用于强制显示同意授权页面,即使用户已经授予全部权限 |
bot_prompt | String | 选择 | 在登录过程中,显示一个选项去添加一个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,在回调函数中给你下面的参数:
参数 | 类型 | 描述 |
code | String | 授权码得到一个access token,验证时间为10分钟,号码只能用一次 |
state | String | state参数包括原始验证请求时的URL。你的应用应该验证这个值是否和原始的请求匹配 |
friendship_status_changed | Boolean | 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响应
参数 | 类型 | 是否必须 | 描述 |
error | String | 必须 | Error code |
error_description | String | 选择 | 人类可读的ASCII编码的文本描述的错误。 |
state | String | 选择 | 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-Type | application/x-www-form-urlencoded |
Request Body 请求体
参数 | 类型 | 是否必须 | 描述 |
grant_type | String | 是 | authorization_code,指定授权类型 |
code | String | 是 | Authorization code |
redirect_uri | String | 是 | Callback URL |
client_id | String | 是 | Channel ID |
client_secret | String | 是 | Channel 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_token | String | Access token 有效期30天 |
expires_in | Number | 以秒为单位的时间,直到访问令牌到期。 |
id_token | String | JSON Web标记(JWT)包含关于用户的信息。这个字段中指定返回只有openid范围。有关更多信息,请参见ID标记。 |
refresh_token | String | 令牌用于获取一个新的访问令牌。有效直到访问令牌到期后10天。 |
scpoe | String | 用户权限授予。然而,电子邮件的范围不是作为值返回属性即使被授予许可范围。 |
token_type | String | 持票人 |
例子
{
"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",
}