目錄
Laravel5中集成Jasig cas统一认证系统,laravel5jasig
首頁 後端開發 php教程 Laravel5中集成Jasig cas统一认证系统,laravel5jasig_PHP教程

Laravel5中集成Jasig cas统一认证系统,laravel5jasig_PHP教程

Jul 12, 2016 am 08:57 AM
cas 系統 統一 認證 整合

Laravel5中集成Jasig cas统一认证系统,laravel5jasig

CAS : CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,这里介绍下我刚在laravel5上搭建成功的cas。提前准备工作:可运行的laravel5的工程,cas的服务器端已经存在。

环境:Linux(ubuntu)

一,下载phpcas源代码。

在laravel5的项目app目录下创建library目录,下载phpcas库,git clone https://github.com/Jasig/phpCAS.git,clone下来是一个phpcas的文件目录。

 

二,创建provider

在app下创建目录cas,创建CasAuthProvider.php,内容如下:

<span> 1</span> <?<span>php
</span><span> 2</span> 
<span> 3</span> <span>namespace cas;
</span><span> 4</span> 
<span> 5</span> <span>use</span><span> Illuminate\Contracts\Auth\UserProvider;
</span><span> 6</span> <span>use</span><span> Illuminate\Contracts\Hashing\Hasher;
</span><span> 7</span> <span>use</span><span> Illuminate\Contracts\Auth\Authenticatable;
</span><span> 8</span> <span>use</span><span> Illuminate\Auth\GenericUser;
</span><span> 9</span> 
<span>10</span> <span>class</span> CasAuthProvider <span>implements</span><span> UserProvider {
</span><span>11</span> 
<span>12</span>     <span>/*</span><span>*
</span><span>13</span> <span>     * Retrieve a user by their unique identifier.
</span><span>14</span> <span>     *
</span><span>15</span> <span>     * @param  mixed  $id
</span><span>16</span> <span>     * @return \Illuminate\Auth\UserInterface|null
</span><span>17</span>      <span>*/</span>
<span>18</span>     <span>public</span> <span>function</span> retrieveById(<span>$id</span><span>) {
</span><span>19</span>         <span>return</span> <span>$this</span>-><span>casUser();
</span><span>20</span> <span>    }
</span><span>21</span> 
<span>22</span>     <span>/*</span><span>*
</span><span>23</span> <span>     * Retrieve a user by the given credentials.
</span><span>24</span> <span>     *
</span><span>25</span> <span>     * @param  array  $credentials
</span><span>26</span> <span>     * @return \Illuminate\Auth\UserInterface|null
</span><span>27</span>      <span>*/</span>
<span>28</span>     <span>public</span> <span>function</span> retrieveByCredentials(<span>array</span> <span>$credentials</span><span>) {
</span><span>29</span>         <span>return</span> <span>$this</span>-><span>casUser();
</span><span>30</span> <span>    }
</span><span>31</span> 
<span>32</span>     <span>/*</span><span>*
</span><span>33</span> <span>     * Validate a user against the given credentials.
</span><span>34</span> <span>     *
</span><span>35</span> <span>     * @param  \Illuminate\Auth\UserInterface  $user
</span><span>36</span> <span>     * @param  array  $credentials
</span><span>37</span> <span>     * @return bool
</span><span>38</span>      <span>*/</span>
<span>39</span>     <span>public</span> <span>function</span> validateCredentials(Authenticatable <span>$user</span>, <span>array</span> <span>$credentials</span><span>) {
</span><span>40</span>         <span>return</span> <span>true</span><span>;
</span><span>41</span> <span>    }
</span><span>42</span> 
<span>43</span>     <span>protected</span> <span>function</span><span> casUser() {
</span><span>44</span>         <span>$cas_host</span> = \Config::get('app.cas_host'<span>);
</span><span>45</span>         <span>//</span><span>dump($cas_host);</span>
<span>46</span>         <span>$cas_context</span> = \Config::get('app.cas_context'<span>);
</span><span>47</span>         <span>$cas_port</span> = \Config::get('app.cas_port'<span>);
</span><span>48</span>         \phpCAS::<span>setDebug();
</span><span>49</span>         \phpCAS::client(CAS_VERSION_2_0, <span>$cas_host</span>, <span>$cas_port</span>, <span>$cas_context</span><span>);
</span><span>50</span>         \phpCAS::<span>setNoCasServerValidation();
</span><span>51</span> 
<span>52</span>         <span>if</span> (\phpCAS::<span>isAuthenticated()) {
</span><span>53</span>             <span>$attributes</span> = <span>array</span><span>(
</span><span>54</span>                 'id' => \phpCAS::getUser(),
<span>55</span>                 'name' => \phpCAS::<span>getUser()
</span><span>56</span> <span>            );
</span><span>57</span>             <span>return</span> <span>new</span> GenericUser(<span>$attributes</span><span>);
</span><span>58</span>         } <span>else</span><span> {
</span><span>59</span>             <span>//</span><span>\phpCAS::setServerURL(\Config::get('app.url'));</span>
<span>60</span>             \phpCAS::<span>forceAuthentication();
</span><span>61</span> <span>        }
</span><span>62</span>         <span>return</span> <span>null</span><span>;
</span><span>63</span> <span>    }
</span><span>64</span> 
<span>65</span>     <span>/*</span><span>*
</span><span>66</span> <span>     * Needed by Laravel 4.1.26 and above
</span><span>67</span>      <span>*/</span>
<span>68</span>     <span>public</span> <span>function</span> retrieveByToken(<span>$identifier</span>, <span>$token</span><span>) {
</span><span>69</span>         <span>return</span> <span>new</span> \<span>Exception</span>('not implemented'<span>);
</span><span>70</span> <span>    }
</span><span>71</span> 
<span>72</span>     <span>/*</span><span>*
</span><span>73</span> <span>     * Needed by Laravel 4.1.26 and above
</span><span>74</span>      <span>*/</span>
<span>75</span>     <span>public</span> <span>function</span> updateRememberToken(Authenticatable <span>$user</span>, <span>$token</span><span>) {
</span><span>76</span>         <span>return</span> <span>new</span> \<span>Exception</span>('not implemented'<span>);
</span><span>77</span> <span>    }
</span><span>78</span> 
<span>79</span> <span>}
</span><span>80</span> 
<span>81</span> ?>
登入後複製

三,修改config

在config/app.php中添加如下三个配置项:

'cas_host'=>'****', //认证服务器
'cas_context'=>'',//还没弄明白是什么
'cas_port'=>000,//认证服务端口
'url'=>'http://localhost/',

四,加载认证库

在app/providers/AppServiceProvider.php里,在类AppServiceProvider的register函数里添加认证方式:

Auth::extend('cas', function($app) {
return new CasAuthProvider;
});

修改app/config/auth.php认证driver:'driver' => 'cas',

在composer.json里配置加载项,在autoload里的classmap中添加如下路径:

"autoload": {
"classmap": [
**************
"app/library",
"app/library/phpCAS",
"app/cas"
]

}

在项目根目录下执行:composer dump-autoload

五,实现

在app/http/controllers/下创建CasAuthController.php,添加login和logout方法:

<span> 1</span>  <span>public</span> <span>function</span><span> login() {
</span><span> 2</span> 
<span> 3</span>         <span>$message_error</span> = ""<span>;
</span><span> 4</span>         <span>if</span> (Auth::<span>check()) {
</span><span> 5</span>             
<span> 6</span>         } <span>else</span><span> {
</span><span> 7</span>             <span>if</span> (Auth::attempt(<span>array</span><span>())) {
</span><span> 8</span>                 <span>//</span><span> Redirect to link after login</span>
<span> 9</span> <span>            }
</span><span>10</span>             <span>//</span><span> Redirect to un-logged in page</span>
<span>11</span> <span>        }
</span><span>12</span>         dump(\phpCAS::<span>getUser());
</span><span>13</span>         dump(Auth::<span>user());
</span><span>14</span> <span>    }
</span><span>15</span> 
<span>16</span>     <span>public</span> <span>function</span><span> logout() {
</span><span>17</span> 
<span>18</span>         <span>$cas_host</span> = \Config::get('app.cas_host'<span>);
</span><span>19</span>         <span>//</span><span>dump($cas_host);</span>
<span>20</span>         <span>$cas_context</span> = \Config::get('app.cas_context'<span>);
</span><span>21</span>         <span>$cas_port</span> = \Config::get('app.cas_port'<span>);
</span><span>22</span>         \phpCAS::<span>setDebug();
</span><span>23</span>         \phpCAS::client(CAS_VERSION_2_0, <span>$cas_host</span>, <span>$cas_port</span>, <span>$cas_context</span><span>);
</span><span>24</span>         \phpCAS::<span>setNoCasServerValidation();
</span><span>25</span>         \phpCAS::logoutWithRedirectService(\Config::get('app.url'<span>));
</span><span>26</span>     }
登入後複製

在routes.php里添加路由规则就OK了,把项目默认的登陆和注销方法指到这里来,当login的时候,会出现服务器的登陆页面。

有个问题,就是这么改动之后,原来我设置的不需要登陆就能浏览的页面,现在进入的时候也会跳出登陆页面,不知道为什么,希望高手指导下,谢谢!

 

参考:https://sonnguyen.ws/how-to-integrate-phpcas-in-laravel/

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1109448.htmlTechArticleLaravel5中集成Jasig cas统一认证系统,laravel5jasig CAS : CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,这里介绍下我刚...
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

CUDA之通用矩陣乘法:從入門到熟練! CUDA之通用矩陣乘法:從入門到熟練! Mar 25, 2024 pm 12:30 PM

CUDA之通用矩陣乘法:從入門到熟練!

华为乾崑 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载 华为乾崑 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载 Jul 30, 2024 pm 02:17 PM

华为乾崑 ADS3.0 智驾系统 8 月上市 享界 S9 首发搭载

蘋果16系統哪個版本最好 蘋果16系統哪個版本最好 Mar 08, 2024 pm 05:16 PM

蘋果16系統哪個版本最好

常用常新!華為Mate60系列升級HarmonyOS 4.2:AI雲端增強、小藝方言太好用了 常用常新!華為Mate60系列升級HarmonyOS 4.2:AI雲端增強、小藝方言太好用了 Jun 02, 2024 pm 02:58 PM

常用常新!華為Mate60系列升級HarmonyOS 4.2:AI雲端增強、小藝方言太好用了

Linux與Windows系統中cmd指令的差異與相似之處 Linux與Windows系統中cmd指令的差異與相似之處 Mar 15, 2024 am 08:12 AM

Linux與Windows系統中cmd指令的差異與相似之處

Oracle資料庫中修改系統日期方法詳解 Oracle資料庫中修改系統日期方法詳解 Mar 09, 2024 am 10:21 AM

Oracle資料庫中修改系統日期方法詳解

系統字體儲存路徑在哪裡 系統字體儲存路徑在哪裡 Feb 19, 2024 pm 09:11 PM

系統字體儲存路徑在哪裡

PHP抽獎系統設計與實作詳解 PHP抽獎系統設計與實作詳解 Mar 01, 2024 am 09:51 AM

PHP抽獎系統設計與實作詳解

See all articles