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
    评论
在 Android 中调用第三方 API 接口,可以通过以下步骤实现: 1. 确认需要调用的第三方 API 的接口地址、请求方式、请求参数格式等信息。 2. 在 Android 项目中添加网络权限声明,以便访问外部网络资源。可以在 AndroidManifest.xml 文件中添加以下代码: ``` <uses-permission android:name="android.permission.INTERNET" /> ``` 3. 在 Android 项目中创建一个网络请求对象,可以使用 HttpURLConnection 或者 Volley 等类库。 4. 通过网络请求对象设置请求方法、请求头部、请求参数等信息,并发送请求。 下面以 HttpURLConnection 为例,具体实现步骤如下: ```java // 在后台线程中进行网络请求 new Thread(new Runnable() { @Override public void run() { try { // 创建一个 URL 对象,用于指定 API 接口地址 URL url = new URL("https://api.example.com/path/to/api"); // 创建一个 HttpURLConnection 对象,用于发送网络请求 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); // 设置请求方法为 GET 或 POST connection.setRequestMethod("GET"); // 设置请求头部信息,例如 API Key、User-Agent 等 connection.setRequestProperty("X-API-Key", "your-api-key"); connection.setRequestProperty("User-Agent", "Android App"); // 设置请求参数,例如 POST 请求需要设置请求体内容 String requestBody = "param1=value1&param2=value2"; OutputStream os = connection.getOutputStream(); os.write(requestBody.getBytes()); os.flush(); os.close(); // 发送网络请求,并获取服务器返回的响应码 int responseCode = connection.getResponseCode(); // 如果请求成功,读取服务器返回的数据 if (responseCode == HttpURLConnection.HTTP_OK) { InputStream is = connection.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); StringBuilder response = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); is.close(); // 处理服务器返回的数据,例如使用 JSON 解析库来解析返回的数据 JSONObject jsonObject = new JSONObject(response.toString()); String result = jsonObject.getString("result"); // 对解析后的数据进行逻辑处理,并根据需要进行展示或者保存 } } catch (Exception e) { e.printStackTrace(); } } }).start(); ``` 需要注意的是,在进行网络请求时,需要在 Android 9.0 以上版本中进行一些额外配置,例如需要使用 HTTPS 协议、需要设置网络安全配置等。可以参考 Android 官方文档进行详细了解。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值