guard/generate/protobuf/permission.proto

147 lines
4.4 KiB
Protocol Buffer
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

syntax = "proto3";
package permission;
option go_package="./permission";
// OKResp
message OKResp {}
// AuthorizationReq 定義授權請求的結構
message AuthorizationReq {
// grant_type 表示授權類型
string grant_type = 1;
// device_id 表示設備 ID
string device_id = 2;
// scope 表示授權範圍
string scope = 3;
// data 是一個通用的 key-value 結構,用於存儲額外數據
map<string,string> data = 4;
// expires 表示過期時間
int32 expires = 5;
// is_refresh_token 表示是否為刷新令牌
bool is_refresh_token = 6;
}
// TokenResp 定義訪問令牌響應的結構
message TokenResp {
// access_token 表示訪問令牌
string access_token = 1;
// token_type 表示令牌類型
string token_type = 2;
// expires_in 表示令牌過期時間
int32 expires_in = 3;
// refresh_token 表示刷新令牌
string refresh_token = 4;
}
// CreateOneTimeTokenReq 建立一次性使用的 token,
// 要帶比較長久的 token 來,驗證後才可以
message CreateOneTimeTokenReq {
string token = 1;
}
message CreateOneTimeTokenResp {
string one_time_token = 1;
}
// RefreshTokenReq 更新 Token
message RefreshTokenReq {
string token = 1;
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 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
int32 client_id = 2;
// uid 表示用戶 ID
string uid = 3;
// device_id 表示設備 ID
string device_id = 4;
// access_token 表示訪問令牌
string access_token = 5;
// expires_in 表示訪問令牌的過期時間(秒)
int32 expires_in = 6;
// access_create_at 表示訪問令牌的創建時間
int64 access_create_at = 7;
// refresh_token 表示刷新令牌
string refresh_token = 8;
// refresh_expires_in 表示刷新令牌的過期時間(秒)
int32 refresh_expires_in = 9;
// refresh_create_at 表示刷新令牌的創建時間
int64 refresh_create_at = 10;
}
// DoTokenByDeviceIDReq 用DeviceID 來做事的
message DoTokenByDeviceIDReq {
repeated string device_id = 1;
}
message Tokens{
repeated string 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);
// CancelTokenByUID 取消 Token (取消這個用戶從不同 Device 登入的所有 Token),也包含他裡面的 One Time Toke
rpc CancelTokenByUID(DoTokenByUIDReq) returns(OKResp);
// CancelTokenByDeviceID 取消 Token
rpc CancelTokenByDeviceID(DoTokenByDeviceIDReq) returns(OKResp);
// ValidationToken 驗證這個 Token 有沒有效
rpc ValidationToken(ValidationTokenReq) returns(ValidationTokenResp);
// GetUserTokensByDeviceIDs 取得目前所對應的 DeviceID 所存在的 Tokens
rpc GetUserTokensByDeviceID(DoTokenByDeviceIDReq) returns(Tokens);
// GetUserTokensByUID 取得目前所對應的 UID 所存在的 Tokens
rpc GetUserTokensByUID(DoTokenByUIDReq) returns(Tokens);
// NewOneTimeToken 建立一次性使用例如RefreshToken
rpc NewOneTimeToken(CreateOneTimeTokenReq) returns(CreateOneTimeTokenResp);
// CancelOneTimeToken 取消一次性使用
rpc CancelOneTimeToken(CreateOneTimeTokenReq) returns(CreateOneTimeTokenResp);
}
//service Role_Service {}
//
//service Permission_Service {}