附005.Kubernetes身份認證

来源:https://www.cnblogs.com/itzgr/archive/2019/06/29/11106364.html
-Advertisement-
Play Games

一 Kubernetes訪問 1.1 Kubernetes交互 與Kubernetes交互通常有kubectl、客戶端(Dashboard)、REST API請求。 1.2 API訪問流程 用戶使用kubectl、客戶端(Web)、或者REST請求訪問API的時候,Kubernetes內部服務或外部 ...


一 Kubernetes訪問

1.1 Kubernetes交互

與Kubernetes交互通常有kubectl、客戶端(Dashboard)、REST API請求。

1.2 API訪問流程

用戶使用kubectl、客戶端(Web)、或者REST請求訪問API的時候,Kubernetes內部服務或外部訪問都可獲得授權來訪問API。當一個請求達到API的時候,通常會經過以下階段:

002

1.3 安裝傳輸

通常在Kubernetes集群中,API在埠443上提供服務。且通常為自簽名的證書,在$USER/.kube/config中包含API伺服器證書的根證書,該證書在配置時用於代替系統預設根證書。因此需要自定義配置證書時,可將證書寫入$USER/.kube/config。當使用kube-up.sh創建集群時,此證書會自動寫入$USER/.kube/config。如果群集有多個用戶,則創建者需要與其他用戶共用證書。

1.4 Authentication

建立TLS後,HTTP請求將進行身份驗證,API伺服器可配置為運行一個或多個身份驗證器模塊。

身份驗證步驟的輸入是整個HTTP請求,但是,它通常只檢查標頭和/或客戶端證書。

身份驗證模塊包括客戶端證書,Password和Plain Tokens,Bootstrap Tokens和JWT令牌(用於服務帳戶)。

可以指定多個驗證模塊,在這種情況下,每個驗證模塊都按順序嘗試,直到其中一個成功。

如果請求無法通過身份驗證,則會被HTTP狀態碼401拒絕。否則,用戶將被認證為特定username用戶。

提示:雖然Kubernetes usernames用於訪問控制決策和請求日誌記錄,但它沒有user對象,也沒有在其對象庫中存儲用戶名或有關用戶的其他信息。

1.5 Authorization

請求被認證為來自特定用戶後,必須授權該請求。

請求必須包括請求者的用戶名,請求的操作以及受操作影響的對象。如果現有策略聲明用戶有權完成請求的操作,則授權該請求。

Kubernetes使用API​​伺服器授權API請求,同時支持多種授權模塊,如ABAC模式,RBAC模式和Webhook模式。管理員創建集群時,已配置了應在API伺服器中使用的授權模塊。如果配置了多個授權模塊,Kubernetes將檢查每個模塊,如果任何模塊授權該請求,則該請求可以繼續。如果所有模塊拒絕該請求,則拒絕該請求(HTTP狀態代碼403)。

示例1:zhangsan

  1 {
  2     "apiVersion": "abac.authorization.kubernetes.io/v1beta1",
  3     "kind": "Policy",
  4     "spec": {
  5         "user": "zhangsan",
  6         "namespace": "projectCaribou",
  7         "resource": "pods",
  8         "readonly": true
  9     }
 10 }

解釋:如上所示zhangsan具備的策略,代表zhangsan只能在projectCaribou命名空間中讀取Pod。

請求操作:

  1 {
  2   "apiVersion": "authorization.k8s.io/v1beta1",
  3   "kind": "SubjectAccessReview",
  4   "spec": {
  5     "resourceAttributes": {
  6       "namespace": "projectCaribou",
  7       "verb": "get",
  8       "group": "unicorn.example.org",
  9       "resource": "pods"
 10     }
 11   }
 12 }

解釋:如上是get pods操作將被允許,但不能create或update projectCaribou,因為沒有得到授權。

1.6 授權審查屬性

Kubernetes在接受到請求時,將對以下屬性進行審查:

  • user:身份驗證時提供的user字元串;
  • group:經過身份驗證的用戶所屬的組名稱列表;
  • extra:由身份驗證層提供的任意字元串鍵到字元串值的映射;
  • API:請求是否是針對API資源;
  • Request path:到其他non-resource的endpoint,如/api或/healthz)的路徑;
  • API request verb:API請求的動作,如 get, list, create, update, patch, watch, proxy, redirect, delete, 和deletecollection;
  • HTTP request verb:HTTP請求的動作,如 get, post, put, 和 delete 用於 non-resource 的請求;
  • Resource:正在訪問的資源的ID或名稱(僅限資源請求),對於使用get,update和patch,和delete動詞的資源請求,您必須提供資源名稱。
  • Subresource:正在訪問的子資源(僅限資源請求);
  • Namespace:要訪問的對象的名稱空間(僅適用於命名空間資源請求);
  • API group:正在訪問的API組(僅限資源請求)。空字元串表示核心API組。

1.7 請求動作


               
HTTP verb

 

對非資源的請求動作類型

 

request verb

 

對資源的請求動作類型

 

POST

 

create

 

GET,HEAD

 

get(對單個資源),list(對集合)

 

PUT

 

update

 

PATCH

 

patch

 

DELETE

 

delete(對單個資源),deletecollection (對集合)

二 授權模塊

2.1 授權模塊介紹

Node:一種特殊用途的授權程式,它根據計劃運行的pod為kubelet授予許可權。

ABAC:基於屬性的訪問控制(ABAC)定義了一種訪問控制範例,通過使用將屬性組合在一起的策略向用戶授予訪問許可權。策略可以使用任何類型的屬性(用戶屬性,資源屬性,對象,環境屬性等)。

RBAC:基於角色的訪問控制(RBAC)是一種根據企業中各個用戶的角色來管理對電腦或網路資源的訪問的方法。在此上下文中,訪問是單個用戶執行特定任務的能力,例如查看,創建或修改文件。

  • 當指定的RBAC(基於角色的訪問控制)使用rbac.authorization.k8s.io API組來驅動授權決策時,允許管理員通過Kubernetes API動態配置許可權策略。
  • 要啟用RBAC,請啟動apiserver --authorization-mode=RBAC。

Webhook:WebHook是一個HTTP回調:發生某些事情時發生的HTTP POST; 通過HTTP POST進行簡單的事件通知。實現WebHooks的Web應用程式會在發生某些事情時將消息發佈到URL。

2.2 授權模塊配置

需要在策略配置中包括一個flag作為標識,指明需要使用的授權模塊:

  • --authorization-mode=ABAC:基於屬性的訪問控制(ABAC)模式允許您使用本地文件配置策略。
  • --authorization-mode=RBAC:基於角色的訪問控制(RBAC)模式允許您使用Kubernetes API創建和存儲策略。
  • --authorization-mode=Webhook:WebHook是一種HTTP回調模式,允許您使用遠程REST端點管理授權。
  • --authorization-mode=Node:節點授權是一種特殊用途的授權模式,專門授權由kubelet發出的API請求。
  • --authorization-mode=AlwaysDeny:該標誌阻止所有請求。僅將此標誌用於測試。
  • --authorization-mode=AlwaysAllow:該標誌允許所有請求。僅在您不需要API請求的授權時才使用此標誌。

提手:可以選擇多個授權模塊,按順序檢查模塊,以便較早的模塊具有更高的優先順序來允許或拒絕請求。

2.3 API Server埠和IP

請求到達API server後,預設情況下,Kubernetes API伺服器在2個埠上提供HTTP服務:

  • localhost port:
    1. 用於測試和引導,以及主節點的其他組件(scheduler, controller-manager)與API通信;
    2. 沒有TLS;
    3. 預設為埠8080,由--insecure-port標誌控制;
    4. 預設IP為localhost,由--insecure-bind-address標誌控制;
    5. 請求繞過身份驗證(authentication )和授權模塊(authorization );
    6. 由admission控制模塊處理的請求;
    7. 需要擁有主機訪問許可權。
  • Secure Port:
    1. 推薦使用;
    2. 使用TLS。由--tls-cert-file標誌設置證書和--tls-private-key-file標誌設置key。
    3. 預設是埠6443,由--secure-port標誌控制;
    4. 預設IP是第一個非localhost網路介面,由--bind-address標誌控制;
    5. 請求由身份驗證(authentication )和授權模塊(authorization )處理。
    6. 由admission控制模塊處理的請求。

三 驗證方式

3.1 認證類型

從版本1.7開始,Dashboard支持基於以下內容的用戶身份驗證:

Authorization:Bearer <token>:每個請求都傳遞給Dashboard的標頭。從1.6版開始支持。具有最高優先順序。如果存在,則不會顯示登錄界面。

Bearer Token:可以在Dashboard 登錄界面上使用的token。

Username/password:可在Dashboard 登錄界面上使用用戶名/密碼。

Kubeconfig:可在Dashboard 登錄界面上使用的Kubeconfig文件。

003

提示:登錄界面已在1.7版中引入,如果您使用的是最新推薦的安裝,則預設情況下將啟用登錄功能。若手動配置證書,則需要傳遞--tls-cert-file和--tls-cert-key標誌到dashboard。HTTPS端點將在Dashboard容器的8443埠上暴露,可以通過提供--port標誌進行修改。

Skip選項將設置dashboard使用dashboard服務帳戶的許可權。Skip自1.10.1開放,但預設情況下禁用按鈕。使用--enable-skip-login標誌顯示它。

3.2 Authorization header

在通過HTTP方式訪問Dashboard時,使用Authorization header是使Dashboard充當用戶的唯一方法。

提示:由於普通HTTP流量容易受到MITM攻擊,因此存在一些風險。

要使Dashboard使用Authorization header,需要將Authorization: Bearer <token>每個請求傳遞到Dashboard。可以通過在Dashboard前配置反向代理來實現。Proxy將負責身份提供者的身份驗證,並將請求標頭中生成的令牌傳遞給Dashboard。

註意:需要正確配置Kubernetes API伺服器才能接受這些令牌。

註意:如果通過apiserver代理訪問儀錶板,則授權標頭將不起作用。無論是kubectl proxy和API Server的方式將無法正常工作。這是因為一旦請求到達API伺服器,所有其他標頭都將被刪除。

3.3 Bearer Token

每個服務帳戶都有一個帶有有效承載令牌的機密,可用於登錄儀錶板。

  1 [root@master ~]# kubectl -n kube-system get secret			#查看secret中令牌

004

提示:所有類型為'kubernetes.io/service-account-token'的機密信息都允許登錄,它們具有不同的許可權。

  1 [root@master ~]# kubectl -n kube-system describe secrets replicaset-controller-token-vv8fd
  2 #獲取replicaset-controller-token-vv8fd的令牌

005

手動創建一個最高許可權名為的admin的ServiceAccount,並綁定名為cluster-admin的ClusterRole角色(該角色擁有集群最高許可權)。

  1 [root@master ~]# cd dashboard/
  2 [root@master dashboard]# vi admin-token.yml
  3 kind: ClusterRoleBinding
  4 apiVersion: rbac.authorization.k8s.io/v1beta1
  5 metadata:
  6   name: admin
  7   annotations:
  8     rbac.authorization.kubernetes.io/autoupdate: "true"
  9 roleRef:
 10   kind: ClusterRole
 11   name: cluster-admin
 12   apiGroup: rbac.authorization.k8s.io
 13 subjects:
 14 - kind: ServiceAccount
 15   name: admin
 16   namespace: kube-system
 17 ---
 18 apiVersion: v1
 19 kind: ServiceAccount
 20 metadata:
 21   name: admin
 22   namespace: kube-system
 23   labels:
 24     kubernetes.io/cluster-service: "true"
 25     addonmanager.kubernetes.io/mode: Reconcile
 26 [root@master dashboard]# kubectl create -f admin-token.yml
 27 [root@master dashboard]# kubectl get secret -n kube-system | grep admin
 28 admin-token-6s8zx                                kubernetes.io/service-account-token   3      94s
 29 [root@master dashboard]# kubectl describe secret/admin-token-6s8zx -n kube-system		#查看所創建的token
 30 [root@master dashboard]# kubectl -n kube-system get secret admin-token-6s8zx -o jsonpath={.data.token} | base64 -d	#直接獲取

006

提示:Bearer Token認證方式本質上是通過ServiceAccount的身份認證加上Bearer token請求API server的方式實現。

3.4 Username/password

預設情況下禁用基本身份驗證,而建議使用授權模式RBAC和--basic-auth-file標誌配置Kubernetes API伺服器。若未配置API伺服器會自動回退到匿名用戶,也不會使用Username/password的方式,使用匿名用戶後無法檢查提供的憑據是否有效。

可通過--authentication-mode=basic標誌開啟儀錶板等等基本身份驗證功能。預設情況下,它設置為--authentication-mode=token。

  1 [root@master ~]# echo "admin,admin,1" >> /etc/kubernetes/basic_auth_file.cvs			#創建用戶和密碼
  2 [root@master ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml
  3 ……
  4   - command:
  5     - --authorization-mode=basic
  6     - --basic-auth-file=/etc/kubernetes/basic_auth_file						#追加
  7 ……

提示:前面為用戶,後面為密碼,數字為用戶ID,多個用戶不可重覆。

若有多個master,以上操作在所有master上執行。

3.5 Kubeconfig

kubeconfig file只支持由--authentication-mode標誌指定的身份驗證,目前不支持外部身份提供程式或基於證書的身份驗證。

kubeconfig的認證可以讓擁有該kubeconfig的用戶只擁有一個或幾個命名空間的操作許可權,這相比與上面的token的方式更加的精確和安全。

  1 [root@master ~]# kubectl -n kube-system get secret admin-token-6s8zx -o jsonpath={.data.token} | base64 -d
  2 eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi02czh6eCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImNkYzY0ZTQzLTkxY2ItMTFlOS04OTkzLTAwMGMyOWZhN2E3OSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.gEy5jU9Ur6xCnF1QYDTpk5zJ-Vkxh-R3TOj_Pn5B0BytSQYXjDRAgzG6BEPUYtz77Jh32fMoA8VVS1HiybhHWe9TYKgGqDhJQ-TBTlSkbWJsAsIkD3yvd2MS9W1kIWMRLowy0vtjgn4yqxVt0l_rZPM3UcuxL_aPZq3-1-kbMVO-Ysq6x2YoxL__ju6OcIeXD_56WdYbS9VsGQKg4aJHb2NMPaQw0A4S3CClqoESzUlVMS2lUms7xCOvOlZi0-r2cSlNbdetVjhfHBAFj8XAkDxAEpalc_eOk1aBxqbvUtapzBp7wBAEPTbhp5NmqMFKcUruo4Ab59TE0bPO836Hhg
  3 [root@master ~]# vi admin_kubeconfig
  4 ……
  5     token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJhZG1pbi10b2tlbi02czh6eCIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJhZG1pbiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImNkYzY0ZTQzLTkxY2ItMTFlOS04OTkzLTAwMGMyOWZhN2E3OSIsInN1YiI6In-N5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTphZG1pbiJ9.gEy5jU9Ur6xCnF1QYDTpk5zJ-Vkxh-R3TOj_Pn5B0BytSQYXjDRAgzG6BEPUYtz77Jh32fMoA8VVS1HiybhHWe9TYKgGqDhJQ-TBTlSkbWJsAsIkD3yvd2MS9W1kIWMRLowy0vtjgn4yqxVt0l_rZPM3UcuxL_aPZq3-1-kbMVO-Ysq6x2YoxL__ju6OcIeXD_56WdYbS9VsGQKg4aJHb2NMPaQw0A4S3CClqoESzUlVMS2lUms7xCOvOlZi0-r2cSlNbdetVjhfHBAFj8XAkDxAEpalc_eOk1aBxqbvUtapzBp7wBAEPTbhp5NmqMFKcUruo4Ab59TE0bPO836Hhg		#追加3.3所創建的具有最高許可權的token

將admin_kubeconfig導出,然後登錄界面的時候在Kubeconfig方式中可以選擇admin_kubeconfig文件即可。

註意:部署生成的 kubeconfig 文件中沒有 token 欄位,需要手動添加該欄位。

本質上,dashboard只支持兩種方法,一種是token,一種是user/password。kubeconfig只是提供了一種便利,並不是一個新的認證方式,如果要用kubeconfig,要麼使用username/password,要麼使用token。

提示:手動創建kubeconfig可參考:https://jimmysong.io/kubernetes-handbook/guide/kubectl-user-authentication-authorization.html

kubeconfig文件詳解參考:https://jimmysong.io/kubernetes-handbook/guide/authenticate-across-clusters-kubeconfig.html。

四 創建管理登錄

如果是在測試環境中,或不考慮安全性的情況之下。可以考慮讓外部用戶直接點擊skip進入到dashboard,並且擁有所有的許可權。可以通過將cluster-admin這個擁有全集群最高許可權的ClusterRole綁定到預設使用的ServiceAccount。

4.1 開啟skip

  1 [root@master ~]# cd dashboard/
  2 [root@master dashboard]# vi kubernetes-dashboard.yaml
  3 ……
  4         args:
  5           - --auto-generate-certificates
  6           - --enable-skip-login
  7 ……

4.2 創建管理員yaml文件

  1 [root@master ~]# cd dashboard/
  2 [root@master dashboard]# vi dashboard-admin.yaml
  3 apiVersion: rbac.authorization.k8s.io/v1beta1
  4 kind: ClusterRoleBinding
  5 metadata:
  6   name: kubernetes-dashboard
  7   labels:
  8     k8s-app: kubernetes-dashboard
  9 roleRef:
 10   apiGroup: rbac.authorization.k8s.io
 11   kind: ClusterRole
 12   name: cluster-admin
 13 subjects:
 14 - kind: ServiceAccount
 15   name: kubernetes-dashboard
 16   namespace: kube-system
 17 [root@master dashboard]# kubectl create -f dashboard-admin.yaml

007

選擇跳過。

008

參考文檔:

https://jimmysong.io/posts/user-authentication-in-kubernetes/

https://zhangchenchen.github.io/2017/08/17/kubernetes-authentication-authorization-admission-control/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Quartz.NET是一個強大、開源、輕量的作業調度框架,你能夠用它來為執行一個作業而創建簡單的或複雜的作業調度。它有很多特征,如:資料庫支持,集群,插件,支持cron-like表達式等等。非常適合在平時的工作中,定時輪詢資料庫同步,定時郵件通知,定時處理數據等。 Quartz.NET允許開發人... ...
  • 本軟體取名為”PDF 目錄編輯器”,使用 WPF 開發,調用第三方類庫 Spire.PDF 免費版。 ...
  • 一個程式最忌諱的就是把自己的數據暴露給其他人,一個加解密可以讓你感覺安全性好一些 直接上代碼 一個加密類 加密 解密 如有疑問請咨詢 ...
  • 先看效果: 這個小圖標可以進行隨意拖拽,點擊還可以產生事件 隨便演示一下,效果就是這樣的。 下麵直接演示如何製作: 新建一個窗體,設置窗體的FormBorderStyle為None(去掉窗體邊框); 調整窗體的大小,和你的圖標差不多大小就行,至於動態圖,還在測試中,圖標必須是沒有背景的,因為有背景的 ...
  • 上一篇隨筆中寫過64位程式與32位程式(https://www.cnblogs.com/Heavystudio/p/11059033.html),最近開始正式在項目中大量實現了,但又出現了一個問題, 由於32位程式中還調用了大量dll,導致每次調用時啟動與關閉時都拖泥帶水,致使出現運行異常runti ...
  • [toc] vim視圖模式及擴展、用戶的相關配置文件 1.複製系統/etc/services文件到/root目錄,然後使用vim命令打開此文件。 2.顯示該文件的行號 3.顯示該文件的每一行結尾的標識符 4.替換文件中所有的"ssh"字元串替換成"oldboy" 5.跳轉到30行,並刪除此行。 6. ...
  • 下載 編譯安裝 配置 如果對你有幫助,請點擊推薦!非常感謝 ...
  • 1.製作一個本地鏡像 同步鏡像: 如果因為網路問題,可以使用proxychains4 來進行代理訪問:(proxychains4 安裝教程) 創建repo metadata: 製作lustre.repo文件: ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...