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_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", 
}









你可能感兴趣的:(【Java】)