<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # :-: API鑒權 ## 簡介 * Secure 基于 JWT 封裝,每次請求的時候,會攔截到需要鑒權的API請求,并對其請求頭攜帶的Token進行認證。 * 若 Token 過期、不存在、錯誤,都會導致鑒權失敗,繼而無法訪問到對應的API。 * SpringBlade 的安全框架 Secure 在[applets-Tool]中,有興趣的小伙伴可以閱讀下源碼,查看實現原理。 * 本章介紹 Secure 的基本使用方法。 ## 如何通過認證 1. 首先需要訪問Auth接口,傳入賬號名密碼,獲得授權成功后的信息 2. 啟動`AuthApplication`、`UserApplication`、`BladeLogApplication`三個服務 ![](https://box.kancloud.cn/f929267260b15605e6eda440fab138ae_379x186.png) 3. 調用[http://localhost/applets-auth/token](http://localhost/applets-auth/token)傳入對應參數,如下圖所示則說明認證信息獲取成功(商業版的用戶請查看OAuth2章節) `("c3dvcmQ6c3dvcmRfc2VjcmV0"為clientId:clientSecret串轉換為的base64編碼,這個是可變的)` ![](https://img.kancloud.cn/29/df/29df803a5be4b87f3d19509b07c19b50_1137x324.png) ![](https://img.kancloud.cn/26/ae/26aeaf18f6bf97e78bb2eb5e2b0e6d62_1173x691.png) 4. 從返回的Json中取到`tokenType`和`accessToken`,將他們拼接起來并以逗號隔開 5. 設置請求頭為`applets-auth`,請求頭對應的值為`tokenType`+`' '`+`accessToken`(后續的所有接口調用都需要帶上請求頭為`Authorization`值為`c3dvcmQ6c3dvcmRfc2VjcmV0`) 6. 再次調用[http://localhost/applets-demo/api/info?name=Chill](http://localhost/applets-demo/api/info?name=Chill)發現返回`Hello, My Name Is: Chill`說明鑒權成功! ![](https://img.kancloud.cn/1b/e3/1be3d8078fa68002548140d136d007df_1161x463.png) 7. 理論上看,所有業務API,都需要進行鑒權,這樣才能保證整個系統的安全性,但也有個別特例情況,API 不需要認證也可以調用,這里就需要用到 Secure 的 API 放行配置。 8. 有些業務 API 鑒權就算成功,也有可能需要根據角色權限來判斷是否可以調用,這里就需要用到 Secure更細顆粒度的鑒權配置。 ## API 鑒權 ### 配置API放行 1. 參考`applets-auth`模塊,將`RegistryConfiguration`拷貝至`applets-demo`中(**商業版由于集成oauth2,已將其移除,按照第二點的截圖直接新增即可**) ![](https://img.kancloud.cn/63/63/6363fb70dc620b9da7e445be060c88c7_646x681.png) 2. 我們將放行的 API 配置改為`/api/info` ![](https://box.kancloud.cn/0f13d072c9c11345d1dd4e3490e2ad02_607x315.png) 3. 若需要攔截某個api下所有的請求,則可以改為`/api/**`, 其中`**`則代表下層所有請求 4. 重啟工程,去掉請求頭,可以看到,請求成功了,說明`API 放行`配置成功 ![](https://img.kancloud.cn/24/a6/24a6c2fc0749b1621e26cbd40b269157_1138x432.png) ### 細顆粒度鑒權配置 1. 鑒權配置用到了 Secure 模塊的`@PreAuth`注解 2. 為了可以起到對比的作用,對`count`進行權限放行(只要通過Token認證就可調用API)。 ~~~ @GetMapping("count") @PreAuth("permitAll()") public Integer count(Integer cnt) { return cnt * 10; } ~~~ 3. 對`info`進行權限判斷,調用方需要擁有`test`的角色權限才可以調用 ~~~ @GetMapping("info") @PreAuth("hasRole('test')") public String info(String name) { return "Hello, My Name Is: " + name; } ~~~ 4. 調用`/api/count`發現請求成功。 5. 調用`/api/info`發現又變回了`請求未授權`,因為我們的`admin`賬號沒有分配`test`角色 6. 嘗試改回`admin`權限 ~~~ @GetMapping("info") @PreAuth("hasRole('administrator')") public String info(String name) { return "Hello, My Name Is: " + name; } ~~~ 7. 調用`/api/info`發現請求成功。 ## 結尾 * Secure 框架進行了兩層 API 鑒權。 * 第一層校驗請求攜帶的Token是否合法,不需要Token校驗的可通過配置放行。 * 第二層校驗`@PreAuth`配置的邏輯是否符合,若不符合也返回`請求未授權`。 * 注解`@PreAuth`支持類層級和方法層級,放到類層級則對該類的所有方法進行鑒權。 * 注解`@PreAuth`還支持 Spring el 表達式,可拓展性非常高,更多功能等您挖掘~ * Spring el 文檔地址:[https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#expressions-operators-logical](https://docs.spring.io/spring/docs/4.3.16.RELEASE/spring-framework-reference/htmlsingle/#expressions-operators-logical)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看