{"id":8746,"date":"2024-05-28T11:01:01","date_gmt":"2024-05-28T03:01:01","guid":{"rendered":""},"modified":"2024-05-28T11:01:01","modified_gmt":"2024-05-28T03:01:01","slug":"app\u7aef\u5b89\u5168\u6027\u52a0\u5bc6\u7b56\u7565\u662f\u4ec0\u4e48_\u82f9\u679c\u624b\u673a\u5982\u4f55\u5bf9app\u8fdb\u884c\u52a0\u5bc6","status":"publish","type":"post","link":"https:\/\/mushiming.com\/8746.html","title":{"rendered":"app\u7aef\u5b89\u5168\u6027\u52a0\u5bc6\u7b56\u7565\u662f\u4ec0\u4e48_\u82f9\u679c\u624b\u673a\u5982\u4f55\u5bf9app\u8fdb\u884c\u52a0\u5bc6"},"content":{"rendered":"<p><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"display: none;\"> \n <path stroke-linecap=\"round\" d=\"M5,0 0,2.5 5,5z\" id=\"raphael-marker-block\" style=\"-webkit-tap-highlight-color: rgba(0, 0, 0, 0);\"><\/path> \n<\/svg> <\/p>\n<p>\u4e3a\u4e86\u4fdd\u969c\u653f\u5e9c\u4e3b\u4f53\u7684\u6570\u636e\u901a\u4fe1\u5b89\u5168\uff0c\u6d89\u53ca\u5230\u654f\u611f\u6570\u636e\u5728\u516c\u7f51\u4e0a\u7684\u4f20\u8f93\u65f6\uff0c\u9700\u8981\u5bf9\u8bf7\u6c42\u5165\u53c2\u548c\u54cd\u5e94\u8fdb\u884c\u975e\u5bf9\u79f0\u52a0\u5bc6\uff0c\u4e14\u4fdd\u8bc1\u4ee5\u4e0b\u4e24\u70b9\u4ee5\u786e\u8ba4\u5b89\u5168\u6027\uff1a<\/p>\n<ol>\n<li><strong>\u5ba2\u6237\u7aef\u4e0d\u7559\u5b58\u79c1\u94a5<\/strong>\uff08\u5b58\u5728\u53cd\u7f16\u8bd1\u548c\u66b4\u529b\u89e3\u5305\u98ce\u9669\uff09<\/li>\n<li>**\u79c1\u94a5\u5728\u4efb\u4f55\u65f6\u5019\u90fd\u4e0d\u7ecf\u8fc7\u54cd\u5e94\u4f53\u8fdb\u884c\u8fd4\u56de\uff08**\u65e0\u79c1\u94a5\u65e0\u6cd5\u89e3\u5bc6\uff0c\u79c1\u94a5\u53ea\u80fd\u660e\u6587\u4f20\u8f93\uff0c\u4e0d\u5b89\u5168\uff09<\/li>\n<\/ol>\n<p>\u9274\u4e8e\u6b64\uff0c\u7ed3\u5408\u4e92\u8054\u7f51\u4e0a\u6d41\u884c\u7684\u52a0\u89e3\u5bc6\u7b56\u7565\uff0c\u6211\u4eec\u9488\u5bf9<strong>\u8bf7\u6c42<\/strong>\u548c<strong>\u54cd\u5e94<\/strong>\u4e24\u4e2a\u9636\u6bb5\u8fdb\u884c\u4e86\u4e0d\u540c\u7684\u52a0\u89e3\u5bc6\u7b56\u7565\u8bbe\u8ba1\u3002\u8bf7\u6c42\u52a0\u5bc6\u540e\uff0c\u662f\u7531<strong>\u670d\u52a1\u7aef\u9a8c\u8bc1 + \u89e3\u5bc6<\/strong>\uff0c\u662f\u76f8\u5bf9\u5b89\u5168\u7684\u3002\u4f46\u662f\u53cd\u8fc7\u6765\uff0c\u54cd\u5e94\u62a5\u6587<strong>\u9700\u8981\u7531\u5ba2\u6237\u7aef\u89e3\u5bc6<\/strong>\uff0c\u5ba2\u6237\u7aef\u662f\u4e0d\u5b89\u5168\u7684\uff0capp\u548cweb\u90fd\u53ef\u4ee5\u88ab\u53cd\u7f16\u8bd1\uff0c\u5bc6\u94a5\u5373\u4f7f\u52a0\u5bc6\u7f13\u5b58\u4e5f\u53ef\u80fd\u88ab\u6fc0\u6d3b\u6210\u529f\u6559\u7a0b\u3002<\/p>\n<blockquote>\n<p>\u9700\u8981\u8ba8\u8bba\u7684\u70b9\u662f\uff1a<\/p>\n<ol>\n<li><strong>\u4f7f\u7528\u9ad8\u4f4d\u6570\u7684\u975e\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5\u5df2\u7ecf\u8db3\u591f\u5b89\u5168\uff0c\u9ed1\u5ba2\u9664\u975e\u5f97\u5230\u79c1\u94a5\uff0c\u5426\u5219\u4e0d\u53ef\u80fd\u7be1\u6539\u8bf7\u6c42\uff08\u9632\u7be1\u6539\u548c\u52a0\u5bc6\u4e8c\u9009\u4e00\uff1f\u7ed3\u5408\u4f7f\u7528\uff1f\uff09<\/strong><\/li>\n<li><strong><s>\u9632\u7be1\u6539\u673a\u5236\u5728\u4e00\u5b9a\u7a0b\u5ea6\u4e0a\u5b58\u5728\u5b89\u5168\u9690\u60a3\uff0c\u6bd4\u8f83\u9002\u7528\u4e8e\u540e\u7aef\u4e0e\u540e\u7aef\u5bf9\u63a5\u3002\u6309\u7167\u7b7e\u540dkey\u7684\u7279\u6b8a\u6027\uff0c\u5e94\u8be5\u53ea\u7559\u5b58\u4e8e\u670d\u52a1\u7aef\u3002\u76ee\u524d\u4e09\u664b\u5148\u950b\u4f7f\u7528\u573a\u666f\u4e3b\u8981\u5728\u5f00\u653e\u5e73\u53f0\uff0c\u540e\u7aef\u5bf9\u63a5\uff0c\u6ca1\u4ec0\u4e48\u95ee\u9898\uff0c\u4f46\u662f\u653e\u5728app\u4e0a\u5c31\u5b58\u5728\u4e00\u5b9a\u9690\u60a3\u3002<\/s><\/strong>\u5df2\u7ecf\u4f7f\u7528\u6539\u8fdb\u65b9\u6848\uff0c\u57fa\u4e8e\u7528\u6237\u767b\u5f55\u8bf7\u6c42\u5206\u53d1\u7b7e\u540dkey\uff0c\u52a0\u5bc6\u7f13\u5b58\u5728Jwt Token\u4e2d\uff0c\u540e\u7aef\u6821\u9a8ctoken\u7684\u540c\u65f6\u6821\u9a8c\u7b7e\u540dkey\u5339\u914d\u3002<\/li>\n<\/ol>\n<p>\u4e0b\u9762\u7684\u65b9\u6848\u4e3b\u8981\u57fa\u4e8e\u7ed3\u5408\u4f7f\u7528\u7684\u65b9\u6848\uff0c\u5b89\u5168\u7cfb\u6570\u975e\u5e38\u9ad8\uff0c\u4f46\u662f\u5728\u9ad8\u5e76\u53d1\u573a\u666f\u4e0b\uff0c\u5bf9\u6027\u80fd\u6709\u4e00\u5b9a\u635f\u8017\u3002<\/p>\n<\/blockquote>\n<p><strong>\u65e0\u8bba\u662f\u4ece\u6027\u80fd\u8fd8\u662f\u4ece\u5b89\u5168\u6027\u89d2\u5ea6\u4e0a\uff0c\u5b9e\u9645\u4f7f\u7528\u4e2d\u6211\u4eec\u7528\u56fd\u5bb6\u975e\u5bf9\u79f0\u5b89\u5168\u52a0\u5bc6\u7b97\u6cd5\uff08SM2\uff0c\u7b80\u79f0\u56fd\u5bc62\u7b97\u6cd5\uff09\uff0c\u5bf9RSA\u8fdb\u884c\u4e86\u5b8c\u5168\u66ff\u4ee3\u3002<\/strong><\/p>\n<\/p>\n<div class=\"toc\">\n<h4>\u6587\u7ae0\u76ee\u5f55<\/h4>\n<ul>\n<li>\n<ul>\n<li>\u4e00\u3001\u7b7e\u540d\u7b97\u6cd5<\/li>\n<li>\n<ul>\n<li>\n<ul>\n<li>2.1.1 \u7b7e\u540d\u62a5\u6587\u7684\u89e3\u6790\u9a8c\u8bc1\u6d41\u7a0b<\/li>\n<li>2.1.2 \u7b7e\u540d\u89c4\u5219<\/li>\n<li>2.1.3 \u7b7e\u540dkey\u7684\u751f\u6210\u4e0e\u9a8c\u8bc1<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\u4e8c\u3001\u8bf7\u6c42\u62a5\u6587\u52a0\u5bc6\uff08~~RSA-256~~ SM2 \u56fd\u5bc62\u7b97\u6cd5\uff09<\/li>\n<li>\n<ul>\n<li>2.1 \u52a0\u5bc6\u7b97\u6cd5<\/li>\n<li>2.2 \u52a0\u89e3\u5bc6\u5de5\u4f5c\u6a21\u5f0f<\/li>\n<\/ul>\n<\/li>\n<li>\u4e09\u3001\u54cd\u5e94\u62a5\u6587\u52a0\u5bc6\uff08KEY-MAP + clientKey + SM2-ECC\uff09<\/li>\n<li>\n<ul>\n<li>3.1 \u6ce8\u518c\u5bc6\u94a5 + \u670d\u52a1\u7aef\u52a0\u5bc6\u7b56\u7565<\/li>\n<li>3.2 \u6ce8\u518c\u8bbe\u5907\u903b\u8f91<\/li>\n<li>3.3 \u670d\u52a1\u7aef\u52a0\u5bc6\u548c\u5bc6\u94a5\u7f13\u5b58<\/li>\n<li>3.4 \u5ba2\u6237\u7aef\u89e3\u5bc6\u8bf7\u6c42\u4f53<\/li>\n<li>3.5 \u5b89\u5168\u6027\u52a0\u56fa\u548c\u65f6\u6548\u7b56\u7565\u8003\u8651<\/li>\n<\/ul>\n<\/li>\n<li>\u56db\u3001 \u5168\u5c40\u6e20\u9053\u6807\u8bc6<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/div>\n<h3>\u4e00\u3001\u7b7e\u540d\u7b97\u6cd5<\/h3>\n<p><s>\u7b7e\u540d\u7b97\u6cd5\u662f\u4e00\u79cd\u9632\u6b62\u7be1\u6539\u7684\u673a\u5236\uff0c\u4f46\u662f\u672c\u8d28\u4e0a\u5e76\u4e0d\u5b89\u5168\u3002\u9ed1\u5ba2\u5f97\u77e5\u4e86\u7b7e\u540d\u7b97\u6cd5\uff0c\u5e76\u5f97\u5230\u7ea6\u5b9a\u7684key\u65f6\uff08\u5f88\u5bb9\u6613\u5728\u5ba2\u6237\u7aef\u53cd\u7f16\u8bd1\u53d6\u5f97\uff09\uff0c\u5c31\u4f1a\u53d8\u5f97\u7545\u901a\u65e0\u963b\u3002\u4e0d\u8fc7\uff0c\u7b7e\u540d\u7b97\u6cd5 + <strong>\u975e\u5bf9\u79f0\u52a0\u5bc6\u7b97\u6cd5<\/strong>\uff0c\u8ba9\u9ed1\u5ba2\u4ece\u6839\u672c\u4e0a\u65e0\u6cd5\u5f97\u5230\u771f\u6b63\u7684\u8bf7\u6c42\u4f53\u3002\u672c\u5c0f\u8282\u9ed8\u8ba4\u6240\u6709\u7684\u8bf7\u6c42\u4f53\u548c\u54cd\u5e94\u4f53\u90fd\u662f\u52a0\u5bc6\u72b6\u6001\uff0c\u52a0\u5bc6\u7b97\u6cd5\u4e0b\u5c0f\u8282\u63d0\u3002<\/s>\u4f7f\u7528\u66f4\u5b89\u5168\u7684\u65b9\u6848\uff0c\u53c2\u8003\u5e8f\u7ae0<\/p>\n<p>\u76ee\u524dapp\u670d\u52a1\u7aef\u7684\u9a8c\u7b7e\u7b97\u6cd5\u5df2\u7ecf\u5b8c\u5168\u80fd\u6ee1\u8db3\u8981\u6c42\uff0c\u8fd9\u91cc\u7ed3\u5408\u6c83\u652f\u4ed8\u63a5\u53e3\u548c\u515a\u5efa\u63a5\u53e3\uff0c\u5bf9\u4e8e\u8bf7\u6c42\u548c\u54cd\u5e94\u90fd\u8fdb\u884c\u9a8c\u7b7e\uff0c\u4ee5\u4fdd\u8bc1\u5b89\u5168\u6027\u3002\u8fdb\u884c\u6574\u5408\u540e\u8bbe\u8ba1\u5982\u4e0b\uff1a<\/p>\n<h5>2.1.1 \u7b7e\u540d\u62a5\u6587\u7684\u89e3\u6790\u9a8c\u8bc1\u6d41\u7a0b<\/h5>\n<p>\u670d\u52a1\u7aef\uff1a<\/p>\n<div class=\"mermaid sequence-diagram\">\n <svg id=\"mermaid-svg-eBQyTizTw8taQPrs\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"158.03125\" style=\"max-width: 911.0859375px;\" viewbox=\"0 0 911.0859375 158.03125\"> <\/p>\n<style>#mermaid-svg-eBQyTizTw8taQPrs {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-eBQyTizTw8taQPrs .error-icon{fill:#552222;}#mermaid-svg-eBQyTizTw8taQPrs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eBQyTizTw8taQPrs .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-eBQyTizTw8taQPrs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eBQyTizTw8taQPrs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eBQyTizTw8taQPrs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eBQyTizTw8taQPrs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eBQyTizTw8taQPrs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eBQyTizTw8taQPrs .marker.cross{stroke:#333333;}#mermaid-svg-eBQyTizTw8taQPrs svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eBQyTizTw8taQPrs .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eBQyTizTw8taQPrs .cluster-label text{fill:#333;}#mermaid-svg-eBQyTizTw8taQPrs .cluster-label span{color:#333;}#mermaid-svg-eBQyTizTw8taQPrs .label text,#mermaid-svg-eBQyTizTw8taQPrs span{fill:#333;color:#333;}#mermaid-svg-eBQyTizTw8taQPrs .node rect,#mermaid-svg-eBQyTizTw8taQPrs .node circle,#mermaid-svg-eBQyTizTw8taQPrs .node ellipse,#mermaid-svg-eBQyTizTw8taQPrs .node polygon,#mermaid-svg-eBQyTizTw8taQPrs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eBQyTizTw8taQPrs .node .label{text-align:center;}#mermaid-svg-eBQyTizTw8taQPrs .node.clickable{cursor:pointer;}#mermaid-svg-eBQyTizTw8taQPrs .arrowheadPath{fill:#333333;}#mermaid-svg-eBQyTizTw8taQPrs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eBQyTizTw8taQPrs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eBQyTizTw8taQPrs .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-eBQyTizTw8taQPrs .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-eBQyTizTw8taQPrs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eBQyTizTw8taQPrs .cluster text{fill:#333;}#mermaid-svg-eBQyTizTw8taQPrs .cluster span{color:#333;}#mermaid-svg-eBQyTizTw8taQPrs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eBQyTizTw8taQPrs :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}<\/style>\n<p>  <g> \n   <g class=\"output\"> \n    <g class=\"clusters\"><\/g> \n    <g class=\"edgePaths\"> \n     <g class=\"edgePath LS-A LE-B\" id=\"L-A-B\" style=\"opacity: 1;\"> \n      <path class=\"path\" d=\"M60,79.015625L64.16666666666667,79.015625C68.33333333333333,79.015625,76.66666666666667,79.015625,85,79.015625C93.33333333333333,79.015625,101.66666666666667,79.015625,105.83333333333333,79.015625L110,79.015625\" marker-end=\"url(#arrowhead607)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead607\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-B LE-C\" style=\"opacity: 1;\" id=\"L-B-C\"> \n      <path class=\"path\" d=\"M255.03125,79.015625L259.1979166666667,79.015625C263.3645833333333,79.015625,271.6979166666667,79.015625,280.03125,79.015625C288.3645833333333,79.015625,296.6979166666667,79.015625,300.8645833333333,79.015625L305.03125,79.015625\" marker-end=\"url(#arrowhead608)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead608\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-C LE-D\" style=\"opacity: 1;\" id=\"L-C-D\"> \n      <path class=\"path\" d=\"M464.84375,79.015625L469.0104166666667,79.015625C473.1770833333333,79.015625,481.5104166666667,79.015625,489.9270833333333,79.09895833333333C498.34375,79.18229166666667,506.84375,79.34895833333333,511.09375,79.43229166666667L515.34375,79.515625\" marker-end=\"url(#arrowhead609)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead609\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-E\" style=\"opacity: 1;\" id=\"L-D-E\"> \n      <path class=\"path\" d=\"M634.5160609037329,56.65668590373281L643.2601288781108,52.38317575311067C652.0041968524886,48.10966560248854,669.4923328012443,39.56264530124427,683.2539789006222,35.28913515062214C697.015625,31.015625,707.05078125,31.015625,712.068359375,31.015625L717.0859375,31.015625\" marker-end=\"url(#arrowhead610)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead610\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-F\" style=\"opacity: 1;\" id=\"L-D-F\"> \n      <path class=\"path\" d=\"M634.5160609037329,102.37456409626719L643.2601288781108,106.48140758022267C652.0041968524886,110.58825106417812,669.4923328012443,118.80193803208907,683.2539789006222,122.90878151604454C697.015625,127.015625,707.05078125,127.015625,712.068359375,127.015625L717.0859375,127.015625\" marker-end=\"url(#arrowhead611)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead611\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-E LE-G\" style=\"opacity: 1;\" id=\"L-E-G\"> \n      <path class=\"path\" d=\"M801.0859375,31.015625L805.2526041666666,31.015625C809.4192708333334,31.015625,817.7526041666666,31.015625,826.3463541666666,35.182291666666664C834.9401041666666,39.348958333333336,843.7942708333334,47.682291666666664,848.2213541666666,51.848958333333336L852.6484375,56.015625\" marker-end=\"url(#arrowhead612)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead612\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-F LE-G\" style=\"opacity: 1;\" id=\"L-F-G\"> \n      <path class=\"path\" d=\"M801.0859375,127.015625L805.2526041666666,127.015625C809.4192708333334,127.015625,817.7526041666666,127.015625,826.3463541666666,122.84895833333333C834.9401041666666,118.68229166666667,843.7942708333334,110.34895833333333,848.2213541666666,106.18229166666667L852.6484375,102.015625\" marker-end=\"url(#arrowhead613)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead613\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n    <\/g> \n    <g class=\"edgeLabels\"> \n     <g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-A-B\" class=\"edgeLabel L-LS-A' L-LE-B\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-B-C\" class=\"edgeLabel L-LS-B' L-LE-C\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-C-D\" class=\"edgeLabel L-LS-C' L-LE-D\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"translate(686.98046875,31.015625)\"> \n      <g transform=\"translate(-4.5625,-13)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"9.125\" height=\"26\"><\/rect> \n       <foreignobject width=\"9.125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-E\" class=\"edgeLabel L-LS-D' L-LE-E\">Y<\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"translate(686.98046875,127.015625)\"> \n      <g transform=\"translate(-5.10546875,-13)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"10.2109375\" height=\"26\"><\/rect> \n       <foreignobject width=\"10.2109375\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-F\" class=\"edgeLabel L-LS-D' L-LE-F\">N<\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-E-G\" class=\"edgeLabel L-LS-E' L-LE-G\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-F-G\" class=\"edgeLabel L-LS-F' L-LE-G\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n    <\/g> \n    <g class=\"nodes\"> \n     <g class=\"node default\" id=\"flowchart-A-410\" transform=\"translate(34,79.015625)\" style=\"opacity: 1;\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5f00\u59cb \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-B-411\" transform=\"translate(182.515625,79.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-72.515625\" y=\"-23\" width=\"145.03125\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-62.515625,-13)\"> \n        <foreignobject width=\"125.03125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u4ece\u8bf7\u6c42\u5934\u53d6\u5f97Sign \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-C-413\" transform=\"translate(384.9375,79.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-79.90625\" y=\"-23\" width=\"159.8125\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-69.90625,-13)\"> \n        <foreignobject width=\"139.8125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u57fa\u4e8e\u8bf7\u6c42\u4f53\u8ba1\u7b97sign \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-D-415\" transform=\"translate(585.859375,79.015625)\"> \n      <polygon points=\"71.015625,0 142.03125,-71.015625 71.015625,-142.03125 0,-71.015625\" transform=\"translate(-71.015625,71.015625)\" class=\"label-container\"><\/polygon> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-45.90625,-13)\"> \n        <foreignobject width=\"91.8125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u6bd4\u8f83sign\u76f8\u7b49 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-E-417\" transform=\"translate(759.0859375,31.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u9a8c\u8bc1\u6210\u529f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-F-419\" transform=\"translate(759.0859375,127.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u9a8c\u8bc1\u5931\u8d25 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-G-421\" transform=\"translate(877.0859375,79.015625)\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7ed3\u675f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n    <\/g> \n   <\/g> \n  <\/g> \n <\/svg>\n<\/div>\n<p>\u5ba2\u6237\u7aef\uff1a<\/p>\n<div class=\"mermaid sequence-diagram\">\n <svg id=\"mermaid-svg-BhrPHn56zAvgVEAH\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"158.03125\" style=\"max-width: 980.9609375px;\" viewbox=\"0 0 980.9609375 158.03125\"> <\/p>\n<style>#mermaid-svg-BhrPHn56zAvgVEAH {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BhrPHn56zAvgVEAH .error-icon{fill:#552222;}#mermaid-svg-BhrPHn56zAvgVEAH .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-BhrPHn56zAvgVEAH .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-BhrPHn56zAvgVEAH .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-BhrPHn56zAvgVEAH .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-BhrPHn56zAvgVEAH .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-BhrPHn56zAvgVEAH .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-BhrPHn56zAvgVEAH .marker{fill:#333333;stroke:#333333;}#mermaid-svg-BhrPHn56zAvgVEAH .marker.cross{stroke:#333333;}#mermaid-svg-BhrPHn56zAvgVEAH svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-BhrPHn56zAvgVEAH .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-BhrPHn56zAvgVEAH .cluster-label text{fill:#333;}#mermaid-svg-BhrPHn56zAvgVEAH .cluster-label span{color:#333;}#mermaid-svg-BhrPHn56zAvgVEAH .label text,#mermaid-svg-BhrPHn56zAvgVEAH span{fill:#333;color:#333;}#mermaid-svg-BhrPHn56zAvgVEAH .node rect,#mermaid-svg-BhrPHn56zAvgVEAH .node circle,#mermaid-svg-BhrPHn56zAvgVEAH .node ellipse,#mermaid-svg-BhrPHn56zAvgVEAH .node polygon,#mermaid-svg-BhrPHn56zAvgVEAH .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-BhrPHn56zAvgVEAH .node .label{text-align:center;}#mermaid-svg-BhrPHn56zAvgVEAH .node.clickable{cursor:pointer;}#mermaid-svg-BhrPHn56zAvgVEAH .arrowheadPath{fill:#333333;}#mermaid-svg-BhrPHn56zAvgVEAH .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-BhrPHn56zAvgVEAH .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-BhrPHn56zAvgVEAH .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-BhrPHn56zAvgVEAH .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-BhrPHn56zAvgVEAH .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-BhrPHn56zAvgVEAH .cluster text{fill:#333;}#mermaid-svg-BhrPHn56zAvgVEAH .cluster span{color:#333;}#mermaid-svg-BhrPHn56zAvgVEAH div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-BhrPHn56zAvgVEAH :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}<\/style>\n<p>  <g> \n   <g class=\"output\"> \n    <g class=\"clusters\"><\/g> \n    <g class=\"edgePaths\"> \n     <g class=\"edgePath LS-A LE-B\" id=\"L-A-B\" style=\"opacity: 1;\"> \n      <path class=\"path\" d=\"M60,79.015625L64.16666666666667,79.015625C68.33333333333333,79.015625,76.66666666666667,79.015625,85,79.015625C93.33333333333333,79.015625,101.66666666666667,79.015625,105.83333333333333,79.015625L110,79.015625\" marker-end=\"url(#arrowhead644)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead644\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-B LE-C\" style=\"opacity: 1;\" id=\"L-B-C\"> \n      <path class=\"path\" d=\"M255.03125,79.015625L259.1979166666667,79.015625C263.3645833333333,79.015625,271.6979166666667,79.015625,280.03125,79.015625C288.3645833333333,79.015625,296.6979166666667,79.015625,300.8645833333333,79.015625L305.03125,79.015625\" marker-end=\"url(#arrowhead645)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead645\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-C LE-D\" style=\"opacity: 1;\" id=\"L-C-D\"> \n      <path class=\"path\" d=\"M464.84375,79.015625L469.0104166666667,79.015625C473.1770833333333,79.015625,481.5104166666667,79.015625,489.9270833333333,79.09895833333333C498.34375,79.18229166666667,506.84375,79.34895833333333,511.09375,79.43229166666667L515.34375,79.515625\" marker-end=\"url(#arrowhead646)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead646\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-E\" style=\"opacity: 1;\" id=\"L-D-E\"> \n      <path class=\"path\" d=\"M634.5160609037329,56.65668590373281L643.2601288781108,52.38317575311067C652.0041968524886,48.10966560248854,669.4923328012443,39.56264530124427,689.0768955672888,35.28913515062214C708.6614583333334,31.015625,730.3424479166666,31.015625,741.1829427083334,31.015625L752.0234375,31.015625\" marker-end=\"url(#arrowhead647)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead647\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-F\" style=\"opacity: 1;\" id=\"L-D-F\"> \n      <path class=\"path\" d=\"M634.5160609037329,102.37456409626719L643.2601288781108,106.48140758022267C652.0041968524886,110.58825106417812,669.4923328012443,118.80193803208907,683.2539789006222,122.90878151604454C697.015625,127.015625,707.05078125,127.015625,712.068359375,127.015625L717.0859375,127.015625\" marker-end=\"url(#arrowhead648)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead648\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-E LE-G\" style=\"opacity: 1;\" id=\"L-E-G\"> \n      <path class=\"path\" d=\"M836.0234375,31.015625L846.0130208333334,31.015625C856.0026041666666,31.015625,875.9817708333334,31.015625,890.3984375,35.182291666666664C904.8151041666666,39.348958333333336,913.6692708333334,47.682291666666664,918.0963541666666,51.848958333333336L922.5234375,56.015625\" marker-end=\"url(#arrowhead649)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead649\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-F LE-G\" style=\"opacity: 1;\" id=\"L-F-G\"> \n      <path class=\"path\" d=\"M870.9609375,127.015625L875.1276041666666,127.015625C879.2942708333334,127.015625,887.6276041666666,127.015625,896.2213541666666,122.84895833333333C904.8151041666666,118.68229166666667,913.6692708333334,110.34895833333333,918.0963541666666,106.18229166666667L922.5234375,102.015625\" marker-end=\"url(#arrowhead650)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead650\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n    <\/g> \n    <g class=\"edgeLabels\"> \n     <g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-A-B\" class=\"edgeLabel L-LS-A' L-LE-B\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-B-C\" class=\"edgeLabel L-LS-B' L-LE-C\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-C-D\" class=\"edgeLabel L-LS-C' L-LE-D\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"translate(686.98046875,31.015625)\"> \n      <g transform=\"translate(-4.5625,-13)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"9.125\" height=\"26\"><\/rect> \n       <foreignobject width=\"9.125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-E\" class=\"edgeLabel L-LS-D' L-LE-E\">Y<\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"translate(686.98046875,127.015625)\"> \n      <g transform=\"translate(-5.10546875,-13)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"10.2109375\" height=\"26\"><\/rect> \n       <foreignobject width=\"10.2109375\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-F\" class=\"edgeLabel L-LS-D' L-LE-F\">N<\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-E-G\" class=\"edgeLabel L-LS-E' L-LE-G\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-F-G\" class=\"edgeLabel L-LS-F' L-LE-G\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n    <\/g> \n    <g class=\"nodes\"> \n     <g class=\"node default\" id=\"flowchart-A-438\" transform=\"translate(34,79.015625)\" style=\"opacity: 1;\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5f00\u59cb \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-B-439\" transform=\"translate(182.515625,79.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-72.515625\" y=\"-23\" width=\"145.03125\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-62.515625,-13)\"> \n        <foreignobject width=\"125.03125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u4ece\u54cd\u5e94\u5934\u53d6\u5f97Sign \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-C-441\" transform=\"translate(384.9375,79.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-79.90625\" y=\"-23\" width=\"159.8125\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-69.90625,-13)\"> \n        <foreignobject width=\"139.8125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u57fa\u4e8e\u54cd\u5e94\u4f53\u8ba1\u7b97sign \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-D-443\" transform=\"translate(585.859375,79.015625)\"> \n      <polygon points=\"71.015625,0 142.03125,-71.015625 71.015625,-142.03125 0,-71.015625\" transform=\"translate(-71.015625,71.015625)\" class=\"label-container\"><\/polygon> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-45.90625,-13)\"> \n        <foreignobject width=\"91.8125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u6bd4\u8f83sign\u76f8\u7b49 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-E-445\" transform=\"translate(794.0234375,31.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u9a8c\u8bc1\u6210\u529f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-F-447\" transform=\"translate(794.0234375,127.015625)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-76.9375\" y=\"-23\" width=\"153.875\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-66.9375,-13)\"> \n        <foreignobject width=\"133.875\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u9a8c\u8bc1\u5931\u8d25,\u629b\u51fa\u5f02\u5e38 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-G-449\" transform=\"translate(946.9609375,79.015625)\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7ed3\u675f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n    <\/g> \n   <\/g> \n  <\/g> \n <\/svg>\n<\/div>\n<h5>2.1.2 \u7b7e\u540d\u89c4\u5219<\/h5>\n<p>\u7b7e\u540d\u7684\u751f\u6210\u89c4\u5219\u5728\u670d\u52a1\u7aef\u548c\u5ba2\u6237\u7aef\u9700\u8981\u4fdd\u6301\u4e00\u81f4\u3002\u989d\u5916\u7684\uff0c\u4e3a\u4e86\u901a\u4fe1\u7684\u5bf9\u79f0\u6027\uff0c\u8fd8\u7ea6\u5b9a\u4e86\u4e00\u4e2a<strong>key<\/strong>\u989d\u5916\u7684\u62fc\u63a5\u5230\u8bf7\u6c42\u4f53\u540e\u9762\uff0c\u518d\u8fdb\u884cmd5\u7f16\u7801\u8fd0\u7b97\uff0c\u6700\u7ec8\u6bd4\u5bf9md5\u503c\u662f\u5426\u5339\u914d\u3002<\/p>\n<p>\u6211\u4eec\u7ea6\u5b9a\u4e86<strong>\u91cd\u8981\u7684\u8bf7\u6c42<\/strong>\u5fc5\u987b\u4ee5<strong>POST<\/strong>\u8bf7\u6c42\u53d1\u9001\uff0c\u6240\u4ee5\u5c06\u6574\u4e2a\u8bf7\u6c42\u4f53\u6309\u7167\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\u8fdb\u884c\u5904\u7406\uff0c\u62fc\u63a5\u7ea6\u5b9a\u7684\u7b7e\u540d<strong>key<\/strong>\u4f5c\u4e3a\u989d\u5916\u7684\u5185\u5bb9\uff0c\u7136\u540e\u8fdb\u884c<strong>md5-hex32<\/strong>\u52a0\u5bc6\u5b57\u7b26\u4e32\u3002<\/p>\n<p>\u4f8b\u5982\uff1a<\/p>\n<p>\u7528\u6237\u8bf7\u6c42POST http:\/\/api.ht-travel.gov.cn\/api\/scenes\uff0c\u7ea6\u5b9a\u7684<strong>key<\/strong>\u4e3a<code>6fg3c7e5b2z0f03h1<\/code>\uff0c \u8bf7\u6c42\u4f53\u4e3a\uff1a<\/p>\n<pre><code class=\"prism language-json\"><span class=\"token punctuation\">{ \n   <!-- --><\/span><span class=\"token string-property property\">\"name\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u5927\u69d0\u6811\"<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string-property property\">\"page\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string-property property\">\"size\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span><span class=\"token punctuation\">,<\/span><span class=\"token string-property property\">\"order\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"asc\"<\/span><span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<p>\u5219\u5c06\u4e0a\u8ff0\u5185\u5bb9\u4f5c\u4e3a\u6574\u4f53\u5b57\u7b26\u4e32\uff0c\u76f4\u63a5\u62fc\u63a5key\uff0c\u5f97\u5230<\/p>\n<pre class=\"language-java prettyprint linenums\"><code>{\"name\": \"\u5927\u69d0\u6811\",\"page\": 0,\"size\": 10,\"order\": \"asc\"}6fg3c7e5b2z0f03h1\n<\/code><\/pre>\n<p>\u7136\u540e\u4f7f\u7528HEX32\u7684\u683c\u5f0f\u5bf9\u4e0a\u9762\u7684\u5b57\u7b26\u4e32\u8fdb\u884cmd5\u7f16\u7801\uff0c\u7ed3\u679c\u4e3a<code>3e40a7c47fd31e80ed8a8074bff5087b<\/code>\uff0c\u8be5\u503c\u5c31\u662f\u7b7e\u540d\u5185\u5bb9\u3002<\/p>\n<p>\u6700\u7ec8\uff0c\u7528\u6237\u8bbf\u95ee\u8fd9\u4e2a\u63a5\u53e3\u7684\u6b63\u786e\u5185\u5bb9\u4e3a\uff1a<\/p>\n<pre><code class=\"prism language-json\"><span class=\"token punctuation\">{ \n   <!-- --><\/span>\n  <span class=\"token string-property property\">\"headers\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{ \n   <!-- --><\/span>\n    <span class=\"token string-property property\">\"Authorization\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u7528\u6237token\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string-property property\">\"Signature\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"3e40a7c47fd31e80ed8a8074bff5087b\"<\/span><span class=\"token punctuation\">,<\/span>\n    <span class=\"token string-property property\">\"Channel\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"ios\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string-property property\">\"body\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"{\\\"name\\\": \\\"\u5927\u69d0\u6811\\\",\\\"page\\\": 0,\\\"size\\\": 10,\\\"order\\\": \\\"asc\\\"}\"<\/span><span class=\"token punctuation\">,<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<p>\u54cd\u5e94\u7684\u7b7e\u540d\u7b97\u6cd5\u4e5f\u4e00\u81f4\u3002\u9700\u8981\u5ba2\u6237\u7aef\u8fdb\u884c\u9a8c\u7b7e\u786e\u8ba4\u3002<\/p>\n<p>\u7b7e\u540dkey\u5728\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u90fd\u5fc5\u987b\u7559\u5b58\uff0c\u4e14\u5185\u5bb9\u4e00\u81f4\u3002<\/p>\n<h5>2.1.3 \u7b7e\u540dkey\u7684\u751f\u6210\u4e0e\u9a8c\u8bc1<\/h5>\n<p>\u7b7e\u540dkey\u7531\u4e8e\u5176\u5ba2\u6237\u7aef\u7559\u5b58\u6027\uff0c\u5bf9\u4e8e\u5b89\u5168\u6027\u800c\u8a00\u662f\u4e00\u4e2a\u9690\u60a3\u3002\u5728\u5b89\u5168\u6027\u7684\u4fdd\u8bc1\u65b9\u5f0f\u9762\u524d\uff0c\u6211\u4eec\u4f18\u5148\u9009\u62e9\u7528\u6237\u7ed1\u5b9a\u7684\u65b9\u5f0f\uff0c\u8fd9\u79cd\u65b9\u5f0f\u5b89\u5168\u3001\u660e\u786e\u3001\u4e14\u8f83\u4e3a\u5bb9\u6613\u5b9e\u73b0\u3002<\/p>\n<p><strong>\u5206\u53d1\u65f6\u673a\uff1a<strong>\u7528\u6237\u767b\u5f55\uff0c\u8fd4\u56de<\/strong>token\u7684\u540c\u65f6\u8fd4\u56de\u7b7e\u540dkey<\/strong>\uff0c<strong>\u5ba2\u6237\u7aef\u7f13\u5b58key\u548ctoken<\/strong>\u3002**\u6ce8\u610f\uff0c\u8fd4\u56de\u7684token\u548ckey\u7684\u62a5\u6587\u90fd\u662f\u7ecf\u8fc7\u52a0\u5bc6\u7684\uff0c\u65e0\u6cd5\u7834\u8bd1\u3002**\u5728token\u6709\u6548\u671f\u5185\uff0c\u7b7e\u540dkey\u4e00\u76f4\u6709\u6548\uff0c<strong>\u5982\u679c\u7528\u6237token\u88ab\u64a4\u56de\u6216\u8fc7\u671f\uff0c\u7b7e\u540dkey\u5931\u6548<\/strong>\uff0c\u65e0\u6cd5\u9a8c\u8bc1\u901a\u8fc7\uff0c\u6700\u5927\u7a0b\u5ea6\u4fdd\u8bc1\u4e86\u5b89\u5168\u6027\u548c\u53ef\u9006\u6027\u3002<\/p>\n<p>**\u9a8c\u8bc1\u65f6\u673a\uff1a**\u7528\u6237\u8bf7\u6c42\u63a5\u53e3\uff0c\u643a\u5e26token\u4ee5\u53ca\u4f7f\u7528\u7b7e\u540dkey\u8fdb\u884c\u7b7e\u540d\u540e\uff0c\u670d\u52a1\u7aef\u4ecetoken\u4fe1\u606f\u4e2d\u89e3\u6790\u51fakey\uff0c\u4f7f\u7528\u7b7e\u540d\u7b97\u6cd5\u8fdb\u884c\u8ba1\u7b97\uff0c\u6bd4\u5bf9\u3002\u5b89\u5168\u6027\u5728\u4e8e\uff1a<\/p>\n<ol>\n<li>token\u6c38\u8fdc\u90fd\u662f\u7531\u670d\u52a1\u5668\u53d1\u653e\uff0c\u5ba2\u6237\u7aef\u6c38\u8fdc\u65e0\u6cd5\u4f2a\u9020\uff0c\u56e0\u4e3a\u4e0d\u77e5\u9053\u5bc6\u94a5\u3002<\/li>\n<li>\u7b7e\u540dkey\u548ctoken\u4e25\u683c\u7ed1\u5b9a\uff0c\u5982\u679c\u4f2a\u9020\u7b7e\u540dkey\uff0c\u7edd\u5bf9\u65e0\u6cd5\u901a\u8fc7\u9a8c\u8bc1<\/li>\n<li>\u7b7e\u540dkey\u65e0\u6cd5\u88ab\u62e6\u622a\uff0c\u4e0d\u4f1a\u660e\u6587\u4ea4\u4e92\u4e8e\u4e92\u8054\u7f51\uff0c\u4ec5\u5b58\u5728\u4e8e\u7528\u6237\u624b\u673a\u7f13\u5b58\uff0c\u4e14\u6bcf\u4e2a\u7528\u6237\u90fd\u4e0d\u4e00\u6837\u3002token\u7ecf\u8fc7\u52a0\u5bc6\uff0c\u5373\u4f7f\u622a\u83b7token\uff0c\u4e5f\u65e0\u6cd5\u6210\u529f\u53d1\u9001\u4efb\u4f55\u8bf7\u6c42\u3002<\/li>\n<\/ol>\n<p><strong>\u7efc\u4e0a\u6240\u8ff0\uff0c\u8be5\u65b9\u6848\u7684\u5b89\u5168\u6027\u57fa\u672c\u4e0a\u53ef\u4ee5\u8fbe\u523090%\u4ee5\u4e0a<\/strong>\uff08\u6392\u9664\u66b4\u529b\u6fc0\u6d3b\u6210\u529f\u6559\u7a0b\u548c\u5ba2\u6237\u7aef\u8bbe\u5907\u88ab\u5077\u76d7\uff09<\/p>\n<h3>\u4e8c\u3001\u8bf7\u6c42\u62a5\u6587\u52a0\u5bc6\uff08<s>RSA-256<\/s> SM2 \u56fd\u5bc62\u7b97\u6cd5\uff09<\/h3>\n<p>\u8bf7\u6c42\u62a5\u6587\u52a0\u5bc6\u7684\u57fa\u7840\u6761\u4ef6\u662f\uff1a<\/p>\n<ol>\n<li>\u4ec5\u5141\u8bb8\u4f7f\u7528<strong>POST<\/strong>\u8bf7\u6c42\u53d1\u9001\u53c2\u6570\u6216\u8bf7\u6c42\u6570\u636e\uff0c\u4ee5\u4fdd\u8bc1\u53c2\u6570\u7684key\u548cvalue\u90fd\u4e0d\u88ab\u6cc4\u9732<\/li>\n<li>\u5ba2\u6237\u7aef\u9700\u8981\u901a\u8fc7<strong>\u7b7e\u540d\u7b97\u6cd5<\/strong>\uff0c\u4fdd\u8bc1\u8bf7\u6c42\u4f53\u4e0d\u88ab\u7be1\u6539\uff0c\u7136\u540e\u518d\u4f7f\u7528\u516c\u94a5\u52a0\u5bc6\u3002\uff08\u516c\u94a5\u662f\u516c\u5f00\u900f\u660e\uff0c\u7f13\u5b58\u5728\u5ba2\u6237\u7aef\uff0c\u6240\u4ee5\u5fc5\u987b\u52a0\u7b7e\u540d\u7b97\u6cd5\u9632\u6b62\u6076\u610f\u7be1\u6539\u4f2a\u9020\uff09<\/li>\n<li>\u52a0\u5bc6\u7684<strong>\u76ee\u7684<\/strong>\u548c\u7b7e\u540d\u7b97\u6cd5\u4e0d\u540c\uff0c\u4e3b\u8981\u662f\u4e3a\u4e86\uff1a\u4fdd\u8bc1\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u5185\u5bb9\u7684\u4fdd\u5bc6\u6027\uff0c\u8ba9\u53c2\u6570\u548c\u503c\u5747\u4e0d\u900f\u660e<\/li>\n<\/ol>\n<h4>2.1 \u52a0\u5bc6\u7b97\u6cd5<\/h4>\n<p>\u8fd9\u4e24\u79cd\u548c\u54b1\u4eec\u73b0\u5728\u767b\u5f55\u63a5\u53e3\u7684\u52a0\u5bc6\u65b9\u5f0f\u90fd\u57fa\u672c\u4e00\u81f4\uff0c\u8bf7\u6c42\u62a5\u6587\u52a0\u89e3\u5bc6\u57fa\u672c\u4e0a\u5c31\u53ef\u4ee5\u5b9a\u8fd9\u79cd\u4e86\uff0c\u73b0\u5728\u4e3b\u8981\u662f\u54cd\u5e94\u62a5\u6587\u52a0\u89e3\u5bc6\u7684\u5b89\u5168\u6027\u9700\u8981\u8ba8\u8bba\u3002\u515a\u5efa\u90a3\u4e2a\u4e5f\u6ca1\u6d89\u53ca\u5230\u54cd\u5e94\u62a5\u6587\u7684\u89e3\u5bc6\u573a\u666f\u3002<\/p>\n<h4>2.2 \u52a0\u89e3\u5bc6\u5de5\u4f5c\u6a21\u5f0f<\/h4>\n<p>\u7531\u670d\u52a1\u7aef\u751f\u6210\u552f\u4e00\u7684\u4e00\u5bf9<strong>SM2-ECC<\/strong>\u5bc6\u94a5\u5bf9\uff08\u692d\u5706\u66f2\u7ebf\u7b97\u6cd5\uff09\uff0c\u516c\u94a5\u63d0\u4f9b\u7ed9\u5ba2\u6237\u7aef\u7559\u5b58\u4e00\u4efd\uff0c\u79c1\u94a5\u5728\u670d\u52a1\u7aef\u7559\u5b58\u3002<\/p>\n<p>\u5ba2\u6237\u7aef\u53d1\u9001\u8bf7\u6c42\u524d\uff0c\u7edf\u4e00\u4f7f\u7528<strong>SM2<\/strong>\u7b97\u6cd5\uff0c\u7528\u516c\u94a5\u5bf9\u8bf7\u6c42\u4f53\u8fdb\u884c\u52a0\u5bc6\uff0c\u7136\u540e\u624d\u53d1\u9001\u3002\u670d\u52a1\u7aef\u63a5\u6536\u540e\uff0c\u5148\u5bf9\u62a5\u6587\u7528\u79c1\u94a5\u89e3\u5bc6\u540e\uff0c\u518d\u8fdb\u884c\u7b7e\u540d\u9a8c\u8bc1\u6216\u8005\u540e\u7eed\u64cd\u4f5c\u3002<\/p>\n<div class=\"mermaid sequence-diagram\">\n <svg id=\"mermaid-svg-8rAjCvtXBFAirXIe\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"62\" style=\"max-width: 994px;\" viewbox=\"0 0 994 62\"> <\/p>\n<style>#mermaid-svg-8rAjCvtXBFAirXIe {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8rAjCvtXBFAirXIe .error-icon{fill:#552222;}#mermaid-svg-8rAjCvtXBFAirXIe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8rAjCvtXBFAirXIe .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-8rAjCvtXBFAirXIe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8rAjCvtXBFAirXIe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8rAjCvtXBFAirXIe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8rAjCvtXBFAirXIe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8rAjCvtXBFAirXIe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8rAjCvtXBFAirXIe .marker.cross{stroke:#333333;}#mermaid-svg-8rAjCvtXBFAirXIe svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8rAjCvtXBFAirXIe .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8rAjCvtXBFAirXIe .cluster-label text{fill:#333;}#mermaid-svg-8rAjCvtXBFAirXIe .cluster-label span{color:#333;}#mermaid-svg-8rAjCvtXBFAirXIe .label text,#mermaid-svg-8rAjCvtXBFAirXIe span{fill:#333;color:#333;}#mermaid-svg-8rAjCvtXBFAirXIe .node rect,#mermaid-svg-8rAjCvtXBFAirXIe .node circle,#mermaid-svg-8rAjCvtXBFAirXIe .node ellipse,#mermaid-svg-8rAjCvtXBFAirXIe .node polygon,#mermaid-svg-8rAjCvtXBFAirXIe .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8rAjCvtXBFAirXIe .node .label{text-align:center;}#mermaid-svg-8rAjCvtXBFAirXIe .node.clickable{cursor:pointer;}#mermaid-svg-8rAjCvtXBFAirXIe .arrowheadPath{fill:#333333;}#mermaid-svg-8rAjCvtXBFAirXIe .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8rAjCvtXBFAirXIe .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8rAjCvtXBFAirXIe .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-8rAjCvtXBFAirXIe .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-8rAjCvtXBFAirXIe .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8rAjCvtXBFAirXIe .cluster text{fill:#333;}#mermaid-svg-8rAjCvtXBFAirXIe .cluster span{color:#333;}#mermaid-svg-8rAjCvtXBFAirXIe div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8rAjCvtXBFAirXIe :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}<\/style>\n<p>  <g> \n   <g class=\"output\"> \n    <g class=\"clusters\"><\/g> \n    <g class=\"edgePaths\"> \n     <g class=\"edgePath LS-A LE-B\" id=\"L-A-B\" style=\"opacity: 1;\"> \n      <path class=\"path\" d=\"M60,31L64.16666666666667,31C68.33333333333333,31,76.66666666666667,31,85,31C93.33333333333333,31,101.66666666666667,31,105.83333333333333,31L110,31\" marker-end=\"url(#arrowhead678)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead678\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-B LE-C\" style=\"opacity: 1;\" id=\"L-B-C\"> \n      <path class=\"path\" d=\"M194,31L198.16666666666666,31C202.33333333333334,31,210.66666666666666,31,219,31C227.33333333333334,31,235.66666666666666,31,239.83333333333334,31L244,31\" marker-end=\"url(#arrowhead679)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead679\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-C LE-D\" style=\"opacity: 1;\" id=\"L-C-D\"> \n      <path class=\"path\" d=\"M408,31L420.1666666666667,31C432.3333333333333,31,456.6666666666667,31,481,31C505.3333333333333,31,529.6666666666666,31,541.8333333333334,31L554,31\" marker-end=\"url(#arrowhead680)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead680\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-E\" style=\"opacity: 1;\" id=\"L-D-E\"> \n      <path class=\"path\" d=\"M718,31L722.1666666666666,31C726.3333333333334,31,734.6666666666666,31,743,31C751.3333333333334,31,759.6666666666666,31,763.8333333333334,31L768,31\" marker-end=\"url(#arrowhead681)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead681\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-E LE-F\" style=\"opacity: 1;\" id=\"L-E-F\"> \n      <path class=\"path\" d=\"M884,31L888.1666666666666,31C892.3333333333334,31,900.6666666666666,31,909,31C917.3333333333334,31,925.6666666666666,31,929.8333333333334,31L934,31\" marker-end=\"url(#arrowhead682)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead682\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n    <\/g> \n    <g class=\"edgeLabels\"> \n     <g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-A-B\" class=\"edgeLabel L-LS-A' L-LE-B\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-B-C\" class=\"edgeLabel L-LS-B' L-LE-C\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"translate(481,31)\"> \n      <g transform=\"translate(-48,-13)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"96\" height=\"26\"><\/rect> \n       <foreignobject width=\"96\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-C-D\" class=\"edgeLabel L-LS-C' L-LE-D\">\u53d1\u9001\u5230\u670d\u52a1\u7aef<\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-E\" class=\"edgeLabel L-LS-D' L-LE-E\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-E-F\" class=\"edgeLabel L-LS-E' L-LE-F\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n    <\/g> \n    <g class=\"nodes\"> \n     <g class=\"node default\" id=\"flowchart-A-462\" transform=\"translate(34,31)\" style=\"opacity: 1;\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5f00\u59cb \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-B-463\" transform=\"translate(152,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u51c6\u5907\u8bf7\u6c42 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-C-465\" transform=\"translate(326,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-82\" y=\"-23\" width=\"164\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-72,-13)\"> \n        <foreignobject width=\"144\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u4f7f\u7528\u516c\u94a5\u52a0\u5bc6\u8bf7\u6c42\u4f53 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-D-467\" transform=\"translate(636,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-82\" y=\"-23\" width=\"164\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-72,-13)\"> \n        <foreignobject width=\"144\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u670d\u52a1\u7aef\u4f7f\u7528\u79c1\u94a5\u89e3\u5bc6 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-E-469\" transform=\"translate(826,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-58\" y=\"-23\" width=\"116\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-48,-13)\"> \n        <foreignobject width=\"96\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5f97\u5230\u660e\u6587\u62a5\u6587 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-F-471\" transform=\"translate(960,31)\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7ed3\u675f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n    <\/g> \n   <\/g> \n  <\/g> \n <\/svg>\n<\/div>\n<h3>\u4e09\u3001\u54cd\u5e94\u62a5\u6587\u52a0\u5bc6\uff08KEY-MAP + clientKey + SM2-ECC\uff09<\/h3>\n<p><strong>\u4e0a\u8ff0\u8bf7\u6c42\u62a5\u6587\u52a0\u5bc6\u7684\u65b9\u6848\u975e\u5e38\u5e38\u89c1\uff0c\u4e14\u7740\u5b9e\u6709\u6548\uff0c\u5728\u5e02\u573a\u548c\u751f\u4ea7\u73af\u5883\u4e2d\u5df2\u7ecf\u5f97\u5230\u4e86\u5145\u5206\u7684\u8ba4\u8bc1<\/strong>\u3002\u4e0e\u8bf7\u6c42\u62a5\u6587\u4e0d\u540c\u7684\u662f\uff0c<strong>\u54cd\u5e94\u62a5\u6587\u5fc5\u987b\u5728\u5ba2\u6237\u7aef\u5b9e\u73b0\u89e3\u5bc6<\/strong>\uff0c\u624d\u53ef\u4fdd\u969c\u5728\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u5168\u7a0b\u5bc6\u6587\u7684\u5b89\u5168\u6027\u3002\u4e09\u664b\u5148\u950b\u7684\u54cd\u5e94\u62a5\u6587\u52a0\u89e3\u5bc6\u4ecd\u7136\u4f7f\u7528RSA\uff0c\u4e14<u>\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u4f7f\u7528\u540c\u4e00\u5957\u79c1\u94a5\uff0c\u867d\u7136\u6bcf\u4e2a\u5bf9\u63a5\u65b9\u90fd\u6709\u72ec\u7acb\u7684\u5bc6\u94a5\u5bf9\uff0c \u4f46\u662f\u4ecd\u7136\u6709\u7740\u8f83\u5927\u7684\u5b89\u5168\u9690\u60a3<\/u>\u3002\u4e0d\u8fc7\u7531\u4e8e\u4e09\u664b\u5148\u950b\u662f<strong>\u9762\u5411\u670d\u52a1\u7aef\u5bf9\u63a5<\/strong>\uff08\u4e0d\u76f4\u63a5\u8bf7\u6c42\u81ea\u5ba2\u6237\u7aef\uff0c\u6211\u4eec\u662f\uff09\uff0c\u6240\u4ee5\u8fd9\u90e8\u5206\u98ce\u9669<strong>\u76f8\u5f53<\/strong>\u5c0f\u3002\u5f53\u7136\u8fd9\u4e9b\u4e0d\u5728\u6211\u4eec\u8ba8\u8bba\u7684\u8303\u7574\u5185\uff0c\u6211\u4eec\u7684\u76ee\u7684\u662f\u4e3a\u4e86\u4fdd\u969c\u4f20\u8f93\u8fc7\u7a0b\u4e2d\u7684\u5b89\u5168\u6027\u3002<\/p>\n<p>\u5b89\u5168\u6027\u8bbe\u8ba1\u4e0d\u5b58\u5728<strong>\u7edd\u5bf9\u7684\u5b89\u5168<\/strong>\u3002\u4f46\u662f\u6211\u4eec\u4f1a<strong>\u5c3d\u53ef\u80fd\u7684\u52a0\u5927\u5176\u5b89\u5168\u7cfb\u6570<\/strong>\u3002\u4e3a\u6b64\uff0c\u6211\u4eec\u91c7\u7528<strong>\u7aef\u5230\u7aef\u52a0\u5bc6\u7684\u65b9\u6848<\/strong>\uff0c\u6df1\u5ea6\u4fdd\u969c\uff1a<\/p>\n<ol>\n<li>\u5ba2\u6237\u7aef<strong>\u4e0d\u7559\u5b58\u5bc6\u94a5<\/strong>\uff0c\u5bc6\u94a5\u548c<strong>\u786c\u4ef6+\u7528\u6237<\/strong>\u5173\u8054\uff0c\u5b9e\u73b0<strong>\u7aef\u5230\u7aef<\/strong>\u7684\u901a\u4fe1\u3002\u6bcf\u53f0\u624b\u673a\u7684\u5bc6\u94a5\u90fd\u4e0d\u4e00\u6837\uff0c\u9664\u975e\u624b\u673a\u88ab\u5077\uff0c\u5426\u5219\u662f\u5b89\u5168\u7684\u3002\u5177\u4f53\u7684\uff0c\u6211\u4eec\u8981\u505a\u5230\uff1a<\/li>\n<\/ol>\n<blockquote>\n<p>\uff081\uff09\u540c\u4e00\u4e2a\u8bbe\u5907\uff0c\u4e0d\u540c\u7684\u7528\u6237\uff0c\u6709\u7740\u4e0d\u540c\u7684\u5bc6\u94a5<\/p>\n<p>\uff082\uff09\u4e0d\u540c\u8bbe\u5907\uff0c\u540c\u4e00\u4e2a\u7528\u6237\uff0c\u6709\u7740\u4e0d\u540c\u7684\u5bc6\u94a5<\/p>\n<p>\uff083\uff09\u4e0d\u7528\u8bbe\u5907\uff0c\u4e0d\u540c\u7528\u6237\uff0c\u6709\u7740\u4e0d\u540c\u7684\u5bc6\u94a5<\/p>\n<p>\uff084\uff09\u540c\u4e00\u8bbe\u5907\uff0c\u540c\u4e00\u7528\u6237\uff0c\u9000\u51fa\u767b\u5f55\u540e\u518d\u767b\u5f55\uff0c\u6709\u7740\u4e0d\u540c\u7684\u5bc6\u94a5<\/p>\n<\/blockquote>\n<ol start=\"2\">\n<li>\u5bc6\u94a5\u57fa\u4e8e\u6ce8\u518c\u7684\u65b9\u5f0f\u8fdb\u884c\u5355\u6b21\u901a\u4fe1\uff0c\u5728\u751f\u547d\u5468\u671f\u5185<strong>\u4ec5\u5b58\u5728\u4e00\u5bf9\u4e00\u7684\u6620\u5c04<\/strong>\uff0c\u518d\u6b21\u6ce8\u518c\u4e4b\u540e\u4e4b\u524d\u7684\u5bc6\u94a5\u4f1a\u5931\u6548\u3002\u6ce8\u518c\u65f6\u673a\u57cb\u70b9\u5728\u7528\u6237\u6210\u529f\u540e\uff0c\u5ba2\u6237\u7aef\u7684\u56de\u8c03\u5904\u7406\u91cc\uff0c\u7c7b\u4f3c\u4e8e\u5fae\u4fe1\uff0c\u9489\u9489\u5f02\u5730\u767b\u5f55\u9876\u6389\u76ee\u524d\u767b\u5f55\u7684\u8bbe\u5907\u4e00\u6837\u3002<\/li>\n<\/ol>\n<h4>3.1 \u6ce8\u518c\u5bc6\u94a5 + \u670d\u52a1\u7aef\u52a0\u5bc6\u7b56\u7565<\/h4>\n<p><s>\u4e3a\u4e86\u5c3d\u53ef\u80fd\u7684\u89c4\u907f\u5ba2\u6237\u7aef\u548c\u670d\u52a1\u7aef\u4e4b\u95f4\u53d1\u751f\u5bc6\u94a5\u4ea4\u6362\u7684\u60c5\u51b5\uff0c\u6211\u4eec\u8bbe\u8ba1\u4e86\u4e00\u7ec4\u5bc6\u94a5\u751f\u6210\u7b56\u7565\u3002\u4ee5RSA\u5bc6\u94a5\u751f\u6210\u539f\u7406\u800c\u8a00\uff0c\u5bc6\u94a5\u7684\u751f\u6210\u9700\u8981\u4e00\u7ec4\u968f\u673a\u503c\uff0c\u968f\u673a\u503c\u7684\u83b7\u53d6\uff0c\u4e00\u79cd\u662fUUID\uff0c\u57fa\u4e8e\u786c\u4ef6\u751f\u6210\u7684\u552f\u4e00ID\uff0c\u4e00\u79cd\u5c31\u662f\u673a\u5668UDID\uff08\u8bbe\u5907\u552f\u4e00\u8bc6\u522b\u7801\uff09\u3002\u65b9\u6848\u7504\u9009\u65f6\uff0c\u7531\u4e8eUDID\u5728iOS\u8bbe\u5907\u4e0a\u4e0d\u518d\u53d7\u5230\u652f\u6301\uff0c\u6545\u653e\u5f03\u3002<\/s><\/p>\n<p><s>\u6700\u7ec8\u7684\u5b9e\u73b0\u65b9\u6848\u662f\uff1a**\u7528\u6237\u767b\u5f55\u6362\u53d6token\u6210\u529f\u540e\uff0c\u5ba2\u6237\u7aef\u57fa\u4e8eRSA256\u7b97\u6cd5\uff0c\u57fa\u4e8e\u4e00\u4e2aUUID\u751f\u6210\u4e00\u5957\u5bc6\u94a5\u5bf9\u3002\u7136\u540e\u901a\u8fc7\u7b7e\u540d\u548c\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5c06\u516c\u94a5\u6ce8\u518c\u5230\u670d\u52a1\u7aef\u3002**\u5bc6\u94a5\u5bf9\u4e00\u4e2a\u7528\u6237\u540c\u65f6\u53ea\u6709\u4e00\u5bf9\u53ef\u7528\u3002<\/s><\/p>\n<p>\u4f7f\u7528\u56fd\u5bc62\u692d\u5706\u66f2\u7ebf\u7b97\u6cd5\u540e\uff0c\u4e0d\u518d\u9700\u8981\u968f\u673a\u503c\uff0c\u65b9\u6848\u4fbf\u7b80\u5316\u4e3a\uff1a<\/p>\n<p><strong>\u7528\u6237\u767b\u5f55\u6362\u53d6token\u6210\u529f\u540e\uff0c\u5ba2\u6237\u7aef\u57fa\u4e8ejs\u7248\u672c\u7684\u56fd\u5bc62\u7b97\u6cd5\u5e93\uff0c\u5f53\u4e0b\u76f4\u63a5\u751f\u6210\u4e00\u5957\u5bc6\u94a5\u5bf9\uff0c\u7136\u540e\u901a\u8fc7\u7b7e\u540d\u548c\u52a0\u5bc6\u7b97\u6cd5\uff0c\u5c06\u516c\u94a5\u6ce8\u518c\u5230\u670d\u52a1\u5668\uff0c\u5e76\u4e0e\u5f53\u524dtoken\u8fdb\u884c\u5f52\u5c5e\u7ed1\u5b9a\u3002token\u6709\u6548\u671f\u95f4\uff0c\u4ec5\u5141\u8bb8\u5b58\u5728\u4e00\u5957\u7ed1\u5b9a\u3002<\/strong><\/p>\n<h4>3.2 \u6ce8\u518c\u8bbe\u5907\u903b\u8f91<\/h4>\n<p>\u6839\u636e\u6211\u4eec\u4e0a\u9762\u7684\u8bbe\u8ba1\uff0c\u6ce8\u518c\u8bbe\u5907\u7684\u65f6\u673a\u662f\u7528\u6237\u767b\u5f55\uff0c\u548ctoken\u8fdb\u884c\u7ed1\u5b9a\uff0c\u8fd9\u91cc\u6211\u4eec\u63cf\u8ff0\u4e00\u4e0b\u767b\u5f55\u8ba4\u8bc1\u63a5\u53e3\uff08\u6ce8\u518c\u63a5\u53e3\u540c\u7406\uff0c\u7406\u8bba\u4e0a\uff0c\u6ce8\u518c\u5373\u767b\u5f55\uff0c\u6700\u7ec8\u4e5f\u4f1a\u5bf9key\u8fdb\u884c\u7ed1\u5b9a\uff09<\/p>\n<p><strong>POST http:\/\/<span class=\"katex--inline\"><span class=\"katex\"><span class=\"katex-mathml\"> s e r v e r : {server}: <\/span><span class=\"katex-html\"><span class=\"base\"><span class=\"strut\" style=\"height: 0.4306em;\"><\/span><span class=\"mord\"><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em;\">ser<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0359em;\">v<\/span><span class=\"mord mathnormal\" style=\"margin-right: 0.0278em;\">er<\/span><\/span><span class=\"mspace\" style=\"margin-right: 0.2778em;\"><\/span><span class=\"mrel\">:<\/span><\/span><\/span><\/span><\/span>{port}\/api\/users\/authenticate<\/strong><\/p>\n<p>\u8bf7\u6c42\u5934\uff1a<\/p>\n<pre><code class=\"prism language-json\"><span class=\"token punctuation\">{ \n   <!-- --><\/span>\n  <span class=\"token string-property property\">\"Sign\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\u7528\u6237\u7b7e\u540d\"<\/span> \n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<p>\u8bf7\u6c42\u62a5\u6587\u5982\u4e0b\uff08\u52a0\u5bc6\u7684\uff09\uff1a<\/p>\n<pre><code class=\"prism language-json\"><span class=\"token punctuation\">{ \n   <!-- --><\/span>\n  <span class=\"token string-property property\">\"username\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string-property property\">\"password\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token operator\">...<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string-property property\">\"publicKey\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"ALSDFJLASJDFASLJKFSADF7SDF78AS876FSA98DF9SA8F7S89ADF798===\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<p>\u4e0d\u8fd4\u56de\u4efb\u4f55\u54cd\u5e94\u3002<\/p>\n<p>\u8be5\u63a5\u53e3\u8981\u6c42\u767b\u5f55\u3002\u539f\u5219\u4e0a\uff0c\u5c06\u7528\u6237ID\u4f5c\u4e3a\u6700\u5c0f\u5355\u5143\u8fdb\u884c\u6620\u5c04\u3002<\/p>\n<p>\u6d41\u7a0b\u56fe\u5982\u4e0b\uff1a<\/p>\n<div class=\"mermaid sequence-diagram\">\n <svg id=\"mermaid-svg-i1SlhD73TBB28ket\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"62\" style=\"max-width: 1029.4609375px;\" viewbox=\"0 0 1029.4609375 62\"> <\/p>\n<style>#mermaid-svg-i1SlhD73TBB28ket {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-i1SlhD73TBB28ket .error-icon{fill:#552222;}#mermaid-svg-i1SlhD73TBB28ket .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-i1SlhD73TBB28ket .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-i1SlhD73TBB28ket .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-i1SlhD73TBB28ket .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-i1SlhD73TBB28ket .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-i1SlhD73TBB28ket .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-i1SlhD73TBB28ket .marker{fill:#333333;stroke:#333333;}#mermaid-svg-i1SlhD73TBB28ket .marker.cross{stroke:#333333;}#mermaid-svg-i1SlhD73TBB28ket svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-i1SlhD73TBB28ket .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-i1SlhD73TBB28ket .cluster-label text{fill:#333;}#mermaid-svg-i1SlhD73TBB28ket .cluster-label span{color:#333;}#mermaid-svg-i1SlhD73TBB28ket .label text,#mermaid-svg-i1SlhD73TBB28ket span{fill:#333;color:#333;}#mermaid-svg-i1SlhD73TBB28ket .node rect,#mermaid-svg-i1SlhD73TBB28ket .node circle,#mermaid-svg-i1SlhD73TBB28ket .node ellipse,#mermaid-svg-i1SlhD73TBB28ket .node polygon,#mermaid-svg-i1SlhD73TBB28ket .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-i1SlhD73TBB28ket .node .label{text-align:center;}#mermaid-svg-i1SlhD73TBB28ket .node.clickable{cursor:pointer;}#mermaid-svg-i1SlhD73TBB28ket .arrowheadPath{fill:#333333;}#mermaid-svg-i1SlhD73TBB28ket .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-i1SlhD73TBB28ket .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-i1SlhD73TBB28ket .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-i1SlhD73TBB28ket .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-i1SlhD73TBB28ket .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-i1SlhD73TBB28ket .cluster text{fill:#333;}#mermaid-svg-i1SlhD73TBB28ket .cluster span{color:#333;}#mermaid-svg-i1SlhD73TBB28ket div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-i1SlhD73TBB28ket :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}<\/style>\n<p>  <g> \n   <g class=\"output\"> \n    <g class=\"clusters\"><\/g> \n    <g class=\"edgePaths\"> \n     <g class=\"edgePath LS-A LE-B\" id=\"L-A-B\" style=\"opacity: 1;\"> \n      <path class=\"path\" d=\"M60,31L64.16666666666667,31C68.33333333333333,31,76.66666666666667,31,85,31C93.33333333333333,31,101.66666666666667,31,105.83333333333333,31L110,31\" marker-end=\"url(#arrowhead714)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead714\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-B LE-C\" style=\"opacity: 1;\" id=\"L-B-C\"> \n      <path class=\"path\" d=\"M194,31L198.16666666666666,31C202.33333333333334,31,210.66666666666666,31,219,31C227.33333333333334,31,235.66666666666666,31,239.83333333333334,31L244,31\" marker-end=\"url(#arrowhead715)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead715\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-C LE-D\" style=\"opacity: 1;\" id=\"L-C-D\"> \n      <path class=\"path\" d=\"M331.015625,31L335.1822916666667,31C339.3489583333333,31,347.6822916666667,31,356.015625,31C364.3489583333333,31,372.6822916666667,31,376.8489583333333,31L381.015625,31\" marker-end=\"url(#arrowhead716)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead716\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-E\" style=\"opacity: 1;\" id=\"L-D-E\"> \n      <path class=\"path\" d=\"M571.4609375,31L575.6276041666666,31C579.7942708333334,31,588.1276041666666,31,596.4609375,31C604.7942708333334,31,613.1276041666666,31,617.2942708333334,31L621.4609375,31\" marker-end=\"url(#arrowhead717)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead717\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-E LE-G\" style=\"opacity: 1;\" id=\"L-E-G\"> \n      <path class=\"path\" d=\"M753.4609375,31L757.6276041666666,31C761.7942708333334,31,770.1276041666666,31,778.4609375,31C786.7942708333334,31,795.1276041666666,31,799.2942708333334,31L803.4609375,31\" marker-end=\"url(#arrowhead718)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead718\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-G LE-H\" style=\"opacity: 1;\" id=\"L-G-H\"> \n      <path class=\"path\" d=\"M919.4609375,31L923.6276041666666,31C927.7942708333334,31,936.1276041666666,31,944.4609375,31C952.7942708333334,31,961.1276041666666,31,965.2942708333334,31L969.4609375,31\" marker-end=\"url(#arrowhead719)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead719\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n    <\/g> \n    <g class=\"edgeLabels\"> \n     <g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-A-B\" class=\"edgeLabel L-LS-A' L-LE-B\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-B-C\" class=\"edgeLabel L-LS-B' L-LE-C\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-C-D\" class=\"edgeLabel L-LS-C' L-LE-D\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-E\" class=\"edgeLabel L-LS-D' L-LE-E\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-E-G\" class=\"edgeLabel L-LS-E' L-LE-G\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-G-H\" class=\"edgeLabel L-LS-G' L-LE-H\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n    <\/g> \n    <g class=\"nodes\"> \n     <g class=\"node default\" id=\"flowchart-A-484\" transform=\"translate(34,31)\" style=\"opacity: 1;\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5f00\u59cb \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-B-485\" transform=\"translate(152,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7528\u6237\u767b\u5f55 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-C-487\" transform=\"translate(287.5078125,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-43.5078125\" y=\"-23\" width=\"87.015625\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-33.5078125,-13)\"> \n        <foreignobject width=\"67.015625\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u751f\u6210UUID \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-D-489\" transform=\"translate(476.23828125,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-95.22265625\" y=\"-23\" width=\"190.4453125\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-85.22265625,-13)\"> \n        <foreignobject width=\"170.4453125\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u751f\u6210RSA\u5bc6\u94a5\u5bf9\u672c\u5730\u7f13\u5b58 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-E-491\" transform=\"translate(687.4609375,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-66\" y=\"-23\" width=\"132\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-56,-13)\"> \n        <foreignobject width=\"112\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u516c\u94a5\u7b7e\u540d\u548c\u52a0\u5bc6 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-G-493\" transform=\"translate(861.4609375,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-58\" y=\"-23\" width=\"116\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-48,-13)\"> \n        <foreignobject width=\"96\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u53d1\u9001\u6ce8\u518c\u8bf7\u6c42 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-H-495\" transform=\"translate(995.4609375,31)\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7ed3\u675f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n    <\/g> \n   <\/g> \n  <\/g> \n <\/svg>\n<\/div>\n<h4>3.3 \u670d\u52a1\u7aef\u52a0\u5bc6\u548c\u5bc6\u94a5\u7f13\u5b58<\/h4>\n<p>\u670d\u52a1\u7aef\u63a5\u6536\u5230\u7ed1\u5b9a\u8bf7\u6c42\u540e\uff0c\u4f1a\u5c06\u8be5\u5bc6\u94a5\u5bf9\u8fdb\u884c\u7f13\u5b58\uff0c\u653e\u5165redis\u7528\u6237\u7f13\u5b58\u533a\uff0c\u4ee5\u4fbf\u540e\u7eed\u4f7f\u7528\u3002\u653e\u5165redis\uff0c\u4e5f\u80fd\u4fdd\u969c\u5206\u5e03\u5f0f\u73af\u5883\u4e0b\u7684\u5bc6\u94a5\u539f\u5b50\u6027\u95ee\u9898\uff0c\u4fdd\u8bc1\u4e00\u4e2a\u7528\u6237\u540c\u4e00\u65f6\u523b\u53ea\u6709\u4e00\u5bf9\u5bc6\u94a5\u53ef\u7528\u3002<\/p>\n<p>\u6d41\u7a0b\u56fe\u5982\u4e0b\uff1a<\/p>\n<div class=\"mermaid sequence-diagram\">\n <svg id=\"mermaid-svg-6dnw0qh2YPaYptM5\" width=\"100%\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" height=\"62\" style=\"max-width: 1220px;\" viewbox=\"0 0 1220 62\"> <\/p>\n<style>#mermaid-svg-6dnw0qh2YPaYptM5 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 .error-icon{fill:#552222;}#mermaid-svg-6dnw0qh2YPaYptM5 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6dnw0qh2YPaYptM5 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-6dnw0qh2YPaYptM5 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6dnw0qh2YPaYptM5 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6dnw0qh2YPaYptM5 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6dnw0qh2YPaYptM5 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6dnw0qh2YPaYptM5 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6dnw0qh2YPaYptM5 .marker.cross{stroke:#333333;}#mermaid-svg-6dnw0qh2YPaYptM5 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6dnw0qh2YPaYptM5 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 .cluster-label text{fill:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 .cluster-label span{color:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 .label text,#mermaid-svg-6dnw0qh2YPaYptM5 span{fill:#333;color:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 .node rect,#mermaid-svg-6dnw0qh2YPaYptM5 .node circle,#mermaid-svg-6dnw0qh2YPaYptM5 .node ellipse,#mermaid-svg-6dnw0qh2YPaYptM5 .node polygon,#mermaid-svg-6dnw0qh2YPaYptM5 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6dnw0qh2YPaYptM5 .node .label{text-align:center;}#mermaid-svg-6dnw0qh2YPaYptM5 .node.clickable{cursor:pointer;}#mermaid-svg-6dnw0qh2YPaYptM5 .arrowheadPath{fill:#333333;}#mermaid-svg-6dnw0qh2YPaYptM5 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6dnw0qh2YPaYptM5 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6dnw0qh2YPaYptM5 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-6dnw0qh2YPaYptM5 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-6dnw0qh2YPaYptM5 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6dnw0qh2YPaYptM5 .cluster text{fill:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 .cluster span{color:#333;}#mermaid-svg-6dnw0qh2YPaYptM5 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6dnw0qh2YPaYptM5 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}<\/style>\n<p>  <g> \n   <g class=\"output\"> \n    <g class=\"clusters\"><\/g> \n    <g class=\"edgePaths\"> \n     <g class=\"edgePath LS-A LE-B\" id=\"L-A-B\" style=\"opacity: 1;\"> \n      <path class=\"path\" d=\"M60,31L64.16666666666667,31C68.33333333333333,31,76.66666666666667,31,85,31C93.33333333333333,31,101.66666666666667,31,105.83333333333333,31L110,31\" marker-end=\"url(#arrowhead761)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead761\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-B LE-C\" style=\"opacity: 1;\" id=\"L-B-C\"> \n      <path class=\"path\" d=\"M194,31L198.16666666666666,31C202.33333333333334,31,210.66666666666666,31,219,31C227.33333333333334,31,235.66666666666666,31,239.83333333333334,31L244,31\" marker-end=\"url(#arrowhead762)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead762\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-C LE-D\" style=\"opacity: 1;\" id=\"L-C-D\"> \n      <path class=\"path\" d=\"M328,31L332.1666666666667,31C336.3333333333333,31,344.6666666666667,31,353,31C361.3333333333333,31,369.6666666666667,31,373.8333333333333,31L378,31\" marker-end=\"url(#arrowhead763)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead763\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-D LE-E\" style=\"opacity: 1;\" id=\"L-D-E\"> \n      <path class=\"path\" d=\"M462,31L466.1666666666667,31C470.3333333333333,31,478.6666666666667,31,487,31C495.3333333333333,31,503.6666666666667,31,507.8333333333333,31L512,31\" marker-end=\"url(#arrowhead764)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead764\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-E LE-F\" style=\"opacity: 1;\" id=\"L-E-F\"> \n      <path class=\"path\" d=\"M612,31L616.1666666666666,31C620.3333333333334,31,628.6666666666666,31,637,31C645.3333333333334,31,653.6666666666666,31,657.8333333333334,31L662,31\" marker-end=\"url(#arrowhead765)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead765\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-F LE-G\" style=\"opacity: 1;\" id=\"L-F-G\"> \n      <path class=\"path\" d=\"M810,31L814.1666666666666,31C818.3333333333334,31,826.6666666666666,31,835,31C843.3333333333334,31,851.6666666666666,31,855.8333333333334,31L860,31\" marker-end=\"url(#arrowhead766)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead766\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-G LE-H\" style=\"opacity: 1;\" id=\"L-G-H\"> \n      <path class=\"path\" d=\"M976,31L980.1666666666666,31C984.3333333333334,31,992.6666666666666,31,1001,31C1009.3333333333334,31,1017.6666666666666,31,1021.8333333333334,31L1026,31\" marker-end=\"url(#arrowhead767)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead767\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n     <g class=\"edgePath LS-H LE-I\" style=\"opacity: 1;\" id=\"L-H-I\"> \n      <path class=\"path\" d=\"M1110,31L1114.1666666666667,31C1118.3333333333333,31,1126.6666666666667,31,1135,31C1143.3333333333333,31,1151.6666666666667,31,1155.8333333333333,31L1160,31\" marker-end=\"url(#arrowhead768)\" style=\"fill:none\"><\/path> \n      <defs> \n       <marker id=\"arrowhead768\" viewbox=\"0 0 10 10\" refx=\"9\" refy=\"5\" markerunits=\"strokeWidth\" markerwidth=\"8\" markerheight=\"6\" orient=\"auto\"> \n        <path d=\"M 0 0 L 10 5 L 0 10 z\" class=\"arrowheadPath\" style=\"stroke-width: 1; stroke-dasharray: 1, 0;\"><\/path> \n       <\/marker> \n      <\/defs> \n     <\/g> \n    <\/g> \n    <g class=\"edgeLabels\"> \n     <g class=\"edgeLabel\" transform=\"\" style=\"opacity: 1;\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-A-B\" class=\"edgeLabel L-LS-A' L-LE-B\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-B-C\" class=\"edgeLabel L-LS-B' L-LE-C\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-C-D\" class=\"edgeLabel L-LS-C' L-LE-D\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-D-E\" class=\"edgeLabel L-LS-D' L-LE-E\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-E-F\" class=\"edgeLabel L-LS-E' L-LE-F\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-F-G\" class=\"edgeLabel L-LS-F' L-LE-G\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-G-H\" class=\"edgeLabel L-LS-G' L-LE-H\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n     <g class=\"edgeLabel\" style=\"opacity: 1;\" transform=\"\"> \n      <g transform=\"translate(0,0)\" class=\"label\"> \n       <rect rx=\"0\" ry=\"0\" width=\"0\" height=\"0\"><\/rect> \n       <foreignobject width=\"0\" height=\"0\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\"> \n         <span id=\"L-L-H-I\" class=\"edgeLabel L-LS-H' L-LE-I\"><\/span> \n        <\/div>\n<p>       <\/foreignobject> \n      <\/g> \n     <\/g> \n    <\/g> \n    <g class=\"nodes\"> \n     <g class=\"node default\" id=\"flowchart-A-512\" transform=\"translate(34,31)\" style=\"opacity: 1;\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5f00\u59cb \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-B-513\" transform=\"translate(152,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7528\u6237\u8bf7\u6c42 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-C-515\" transform=\"translate(286,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u89e3\u5bc6\u8bf7\u6c42 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-D-517\" transform=\"translate(420,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u5904\u7406\u903b\u8f91 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-E-519\" transform=\"translate(562,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-50\" y=\"-23\" width=\"100\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-40,-13)\"> \n        <foreignobject width=\"80\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u751f\u6210\u54cd\u5e94\u4f53 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-F-521\" transform=\"translate(736,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-74\" y=\"-23\" width=\"148\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-64,-13)\"> \n        <foreignobject width=\"128\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7528\u6237\u8eab\u4efd\u786e\u8ba4\u516c\u94a5 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-G-523\" transform=\"translate(918,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-58\" y=\"-23\" width=\"116\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-48,-13)\"> \n        <foreignobject width=\"96\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u4f7f\u7528\u516c\u94a5\u52a0\u5bc6 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-H-525\" transform=\"translate(1068,31)\"> \n      <rect rx=\"0\" ry=\"0\" x=\"-42\" y=\"-23\" width=\"84\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-32,-13)\"> \n        <foreignobject width=\"64\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u53d1\u9001\u54cd\u5e94 \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n     <g class=\"node default\" style=\"opacity: 1;\" id=\"flowchart-I-527\" transform=\"translate(1186,31)\"> \n      <rect rx=\"5\" ry=\"5\" x=\"-26\" y=\"-23\" width=\"52\" height=\"46\" class=\"label-container\"><\/rect> \n      <g class=\"label\" transform=\"translate(0,0)\"> \n       <g transform=\"translate(-16,-13)\"> \n        <foreignobject width=\"32\" height=\"26\"> <\/p>\n<div style=\"display: inline-block; white-space: nowrap;\">\n           \u7ed3\u675f \n         <\/div>\n<p>        <\/foreignobject> \n       <\/g> \n      <\/g> \n     <\/g> \n    <\/g> \n   <\/g> \n  <\/g> \n <\/svg>\n<\/div>\n<h4>3.4 \u5ba2\u6237\u7aef\u89e3\u5bc6\u8bf7\u6c42\u4f53<\/h4>\n<p>\u6ce8\u518c\u5bc6\u94a5\u540e\uff0c\u5ba2\u6237\u7aef\u5df2\u7ecf\u53ef\u4ee5\u6b63\u5e38\u53d1\u9001\u8bf7\u6c42\u3002\u670d\u52a1\u7aef\u8fd4\u56de\u7684\u62a5\u6587\u4e3a\u5bc6\u6587\uff0c\u5ba2\u6237\u7aef\u4f7f\u7528\u5f53\u524d\u7f13\u5b58\u7684\u5bc6\u94a5\u5bf9\uff0c\u5f97\u5230\u79c1\u94a5\u8fdb\u884c\u89e3\u5bc6\u3002\u89e3\u5bc6\u53ea\u6709\u6210\u529f\u548c\u5931\u8d25\u4e24\u79cd\u7ed3\u679c\uff0c\u89e3\u5bc6\u6210\u529f\uff0c\u6b63\u5e38\u5904\u7406\u540e\u7eed\u903b\u8f91\uff1b\u89e3\u5bc6\u5931\u8d25\uff0c\u5ba2\u6237\u7aef\u89e6\u53d1\u9000\u51fa\u767b\u5f55\u52a8\u4f5c\uff0c\u5f39\u51fa\u7528\u6237\u7684\u975e\u6cd5\u8bf7\u6c42\u3002<\/p>\n<h4>3.5 \u5b89\u5168\u6027\u52a0\u56fa\u548c\u65f6\u6548\u7b56\u7565\u8003\u8651<\/h4>\n<p>\u672c\u65b9\u6848\u867d\u7136\u80fd\u591f\u4e25\u683c\u4fdd\u969c\u901a\u4fe1\u5b89\u5168\uff0c\u4f46\u662f\u5b58\u5728\u64cd\u4f5c\u6f0f\u6d1e\uff08\u4e0d\u5b58\u5728\u4f20\u8f93\u8fc7\u7a0b\u6f0f\u6d1e\uff09\u3002\u5982\u679c\u9ed1\u5ba2\u5df2\u7ecf\u53d6\u5f97\u4e86\u7528\u6237token\uff0c\u5e76\u4e14\u622a\u83b7\u4e86\u6211\u4eec\u7684\u516c\u94a5\uff0c\u5f97\u5230\u4e86\u7b7e\u540d\u7b97\u6cd5\uff0c\u5c31\u53ef\u4ee5\u81ea\u7531\u7684\u751f\u6210UUID\u5f3a\u884c\u6362\u53d6\u5bc6\u94a5\u5bf9\u8fdb\u884c\u6076\u610f\u6ce8\u518c\uff0c\u663e\u7136\u8fd9\u662f\u4e0d\u88ab\u5141\u8bb8\u7684\u3002<\/p>\n<p>\u4e3a\u4e86\u89c4\u907f\u8fd9\u4e00\u70b9\uff0c\u6211\u4eec\u8981\u6c42\u8bbe\u5907\u5728\u7528\u6237\u767b\u5f55\u65f6\u5c31\u63d0\u4f9b\u516c\u94a5\u4fe1\u606f\uff0c\u8fd9\u6837\u4e00\u6765\uff0c\u9ed1\u5ba2\u4e0d\u5149\u5f97\u622a\u83b7token\uff0c\u8fd8\u5f97\u719f\u77e5\u7528\u6237\u7684\u8d26\u53f7\uff0c\u5bc6\u7801\u6216\u9a8c\u8bc1\u7801\u7b49\u4fe1\u606f\uff0c\u800c\u4e14\u6ca1\u6709\u8bf7\u6c42\u516c\u94a5\u65e0\u6cd5\u89e3\u5bc6\uff0c\u6700\u7ec8\u9ed1\u5ba2\u5c06\u675f\u624b\u65e0\u7b56\u3002<\/p>\n<p>\u6211\u4eec\u5c06\u4e0a\u8ff0\u65b9\u6848\u6539\u9020\u4e3a\u548c\u767b\u5f55\u63a5\u53e3\u7ed3\u5408\u7684\u7b56\u7565\u3002\u7528\u6237\u8f93\u5165\u8d26\u53f7\u5bc6\u7801\uff08\u9a8c\u8bc1\u7801\uff09\u540e\uff0c\u7531app\u7aef\u6267\u884c\u5bc6\u94a5\u751f\u6210\uff0c\u5e76\u62fc\u63a5\u5230\u767b\u5f55\u8bf7\u6c42\u4f53\u5185\u3002<\/p>\n<p>\u8bf7\u6c42\u62a5\u6587\u5c06\u53d8\u4e3a\uff1a<\/p>\n<pre><code class=\"prism language-json\"><span class=\"token punctuation\">{ \n   <!-- --><\/span>\n  <span class=\"token string-property property\">\"phone\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"152123121231\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string-property property\">\"code\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"215331\"<\/span><span class=\"token punctuation\">,<\/span>\n  <span class=\"token string-property property\">\"key\"<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">\"ALSDFJLASJDFASLJKFSADF7SDF78AS876FSA98DF9SA8F7S89ADF798===\"<\/span>\n<span class=\"token punctuation\">}<\/span>\n<\/code><\/pre>\n<p>\u54cd\u5e94\u4ec5\u8fd4\u56detoken<\/p>\n<h3>\u56db\u3001 \u5168\u5c40\u6e20\u9053\u6807\u8bc6<\/h3>\n<p>app\u5728\u63a5\u53e3\u8c03\u7528\u8fc7\u7a0b\u4e2d\uff0c\u9700\u8981\u660e\u786e\u6807\u8bb0\u8c03\u7528\u6e20\u9053\uff0c\u4ee5\u65b9\u4fbf\u4e4b\u540e\u7684\u57cb\u70b9\u3001\u7ec8\u7aef\u7edf\u8ba1\u7b49\u529f\u80fd\u3002<\/p>\n<p>\u9700\u8981\u5168\u5c40\u7684\u5728\u8bf7\u6c42\u5934\u4e2d\u6dfb\u52a0<code>Channel<\/code>\uff0c\u53ef\u9009\u503c\u4e3a<code>ios<\/code>, <code>android<\/code>, <code>web<\/code>, <code>h5<\/code>\u7b49<\/p>\n","protected":false},"excerpt":{"rendered":"app\u7aef\u5b89\u5168\u6027\u52a0\u5bc6\u7b56\u7565\u662f\u4ec0\u4e48_\u82f9\u679c\u624b\u673a\u5982\u4f55\u5bf9app\u8fdb\u884c\u52a0\u5bc6\u4e00\u79cd\u7b7e\u540d+\u9a8c\u7b7e\u7684\u8bbe\u8ba1\u65b9\u6848\uff0c\u4f9b\u5927\u5bb6\u53c2\u8003_app\u7aef\u53d1\u8d77\u7684\u8bf7\u6c42\u5185\u5bb9\u9700\u8981\u52a0\u5bc6\u5417","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"_links":{"self":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/posts\/8746"}],"collection":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/comments?post=8746"}],"version-history":[{"count":0,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/posts\/8746\/revisions"}],"wp:attachment":[{"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/media?parent=8746"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/categories?post=8746"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mushiming.com\/wp-json\/wp\/v2\/tags?post=8746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}