2024-08-24 07:14:58 +00:00
|
|
|
|
syntax = "proto3";
|
|
|
|
|
|
|
|
|
|
package permission;
|
|
|
|
|
|
|
|
|
|
option go_package="./permission";
|
|
|
|
|
|
|
|
|
|
// OKResp
|
|
|
|
|
message OKResp {}
|
|
|
|
|
// NoneReq
|
|
|
|
|
message NoneReq {}
|
|
|
|
|
|
|
|
|
|
// AuthorizationReq 定義授權請求的結構
|
|
|
|
|
message AuthorizationReq {
|
|
|
|
|
// grant_type 表示授權類型
|
|
|
|
|
string grant_type = 1;
|
|
|
|
|
// device_id 表示設備 ID
|
|
|
|
|
string device_id = 2;
|
|
|
|
|
// scope 表示授權範圍
|
|
|
|
|
string scope = 3;
|
2025-03-05 07:10:46 +00:00
|
|
|
|
// 角色
|
|
|
|
|
string role = 4;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
// data 是一個通用的 key-value 結構,用於存儲額外數據
|
2025-03-05 07:10:46 +00:00
|
|
|
|
map<string,string> data = 5;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
// is_refresh_token 表示是否為刷新令牌
|
|
|
|
|
bool is_refresh_token = 6;
|
2025-03-05 07:10:46 +00:00
|
|
|
|
// 發送token 的 uid
|
|
|
|
|
string uid =7;
|
|
|
|
|
// 發送token 的 account
|
|
|
|
|
string account = 8;
|
|
|
|
|
// expires 表示過期時間(unixnamo utc 時間)
|
|
|
|
|
optional int64 expires = 9;
|
|
|
|
|
// expires 表示過期時間(unixnamo utc 時間)
|
|
|
|
|
optional int64 refreshExpire = 10;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// TokenResp 定義訪問令牌響應的結構
|
|
|
|
|
message TokenResp {
|
|
|
|
|
// access_token 表示訪問令牌
|
|
|
|
|
string access_token = 1;
|
|
|
|
|
// token_type 表示令牌類型
|
|
|
|
|
string token_type = 2;
|
|
|
|
|
// expires_in 表示令牌過期時間
|
2025-03-05 07:10:46 +00:00
|
|
|
|
int64 expires_in = 3;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
// refresh_token 表示刷新令牌
|
|
|
|
|
string refresh_token = 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// RefreshTokenReq 更新 Token
|
|
|
|
|
message RefreshTokenReq {
|
2025-03-05 07:10:46 +00:00
|
|
|
|
string token = 1; // refresh token
|
2024-08-24 07:14:58 +00:00
|
|
|
|
string scope = 2;
|
|
|
|
|
int64 expires = 3;
|
|
|
|
|
string device_id = 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// https://datatracker.ietf.org/doc/html/rfc6749#section-4.3.3
|
|
|
|
|
message RefreshTokenResp {
|
|
|
|
|
string token =1;
|
|
|
|
|
string one_time_token = 2;
|
|
|
|
|
int64 expires_in = 3;
|
|
|
|
|
string token_type = 4;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CancelTokenReq 註銷這個 Token
|
|
|
|
|
message CancelTokenReq {
|
|
|
|
|
string token = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// CancelTokenReq 註銷這個 Token
|
|
|
|
|
message DoTokenByUIDReq {
|
|
|
|
|
repeated string ids = 1;
|
|
|
|
|
string uid = 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// QueryTokenByUIDReq 拿這個UID 找 Token
|
|
|
|
|
message QueryTokenByUIDReq {
|
|
|
|
|
string uid = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ValidationTokenReq 驗證這個 Token
|
|
|
|
|
message ValidationTokenReq {
|
|
|
|
|
string token = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ValidationTokenResp 驗證以及取得 Token 詳情
|
|
|
|
|
message ValidationTokenResp {
|
|
|
|
|
Token token = 1;
|
|
|
|
|
map<string,string> data = 2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Token 定義令牌的結構
|
|
|
|
|
message Token {
|
|
|
|
|
// ID 表示令牌的唯一標識符
|
|
|
|
|
string id = 1;
|
|
|
|
|
// client_id 表示客戶端 ID
|
2025-03-05 07:10:46 +00:00
|
|
|
|
int64 client_id = 2;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
// uid 表示用戶 ID
|
|
|
|
|
string uid = 3;
|
|
|
|
|
// device_id 表示設備 ID
|
|
|
|
|
string device_id = 4;
|
|
|
|
|
// access_token 表示訪問令牌
|
|
|
|
|
string access_token = 5;
|
|
|
|
|
// expires_in 表示訪問令牌的過期時間(秒)
|
2025-03-05 07:10:46 +00:00
|
|
|
|
int64 expires_in = 6;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
// access_create_at 表示訪問令牌的創建時間
|
|
|
|
|
int64 access_create_at = 7;
|
|
|
|
|
// refresh_token 表示刷新令牌
|
|
|
|
|
string refresh_token = 8;
|
|
|
|
|
// refresh_expires_in 表示刷新令牌的過期時間(秒)
|
2025-03-05 07:10:46 +00:00
|
|
|
|
int64 refresh_expires_in = 9;
|
2024-08-24 07:14:58 +00:00
|
|
|
|
// refresh_create_at 表示刷新令牌的創建時間
|
|
|
|
|
int64 refresh_create_at = 10;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// DoTokenByDeviceIDReq 用DeviceID 來做事的
|
|
|
|
|
message DoTokenByDeviceIDReq {
|
|
|
|
|
string device_id = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
message Tokens{
|
|
|
|
|
repeated TokenResp token = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 跟 Token 相關的大小事,這次只回應錯誤,以及結果,不統一規範
|
|
|
|
|
// 錯誤碼應該在 Biz GW 在做回應,另外我這邊取名字比較通用,
|
|
|
|
|
// access_token -> token , refresh_token -> one_time_token
|
|
|
|
|
service TokenService {
|
|
|
|
|
// NewToken 建立一個新的 Token,例如:AccessToken
|
|
|
|
|
rpc NewToken(AuthorizationReq) returns(TokenResp);
|
|
|
|
|
// RefreshToken 更新目前的token 以及裡面包含的一次性 Token
|
|
|
|
|
rpc RefreshToken(RefreshTokenReq) returns(RefreshTokenResp);
|
|
|
|
|
// CancelToken 取消 Token,也包含他裡面的 One Time Toke
|
|
|
|
|
rpc CancelToken(CancelTokenReq) returns(OKResp);
|
|
|
|
|
// ValidationToken 驗證這個 Token 有沒有效
|
|
|
|
|
rpc ValidationToken(ValidationTokenReq) returns(ValidationTokenResp);
|
|
|
|
|
// CancelTokens 取消 Token 從UID 視角,以及 token id 視角出發, UID 登出,底下所有 Device ID 也要登出, Token ID 登出, 所有 UID + Device 都要登出
|
|
|
|
|
rpc CancelTokens(DoTokenByUIDReq) returns(OKResp);
|
2025-03-05 07:10:46 +00:00
|
|
|
|
// CancelTokenByDeviceID 取消 Token, 從 Device 視角出發,可以選,登出這個Device 下所有 token ,登出這個Device 下指定token
|
|
|
|
|
rpc CancelTokenByDeviceID(DoTokenByDeviceIDReq) returns(OKResp);
|
|
|
|
|
// GetUserTokensByDeviceID 取得目前所對應的 DeviceID 所存在的 Tokens
|
|
|
|
|
rpc GetUserTokensByDeviceID(DoTokenByDeviceIDReq) returns(Tokens);
|
|
|
|
|
// GetUserTokensByUID 取得目前所對應的 UID 所存在的 Tokens
|
|
|
|
|
rpc GetUserTokensByUID(QueryTokenByUIDReq) returns(Tokens);
|
2024-08-24 07:14:58 +00:00
|
|
|
|
}
|
2025-03-05 07:10:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// permission / role / role permission 相關
|
|
|
|
|
service PermissionService{
|
|
|
|
|
|
|
|
|
|
}
|