{"id":30096,"date":"2015-11-18T01:39:52","date_gmt":"2015-11-17T20:09:52","guid":{"rendered":"http:\/\/www.tothenew.com\/blog\/?p=30096"},"modified":"2017-05-01T15:16:32","modified_gmt":"2017-05-01T09:46:32","slug":"sso-with-central-authentication-service","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/sso-with-central-authentication-service\/","title":{"rendered":"SSO with Central Authentication Service"},"content":{"rendered":"<p>You can check How to set up CAS Rest api with JDBC Authentication.\u00a0for setting up CAS server for your application. Now if you want to test if your CAS server is working properly for REST calls then you can use the following code and you need to check for the following things.<\/p>\n<ul>\n<li>You need to make a GET or POST call depending on your CAS server setup.<\/li>\n<li>If the Username and Password are correct then you will get a TGT (Ticket Granting Token)<\/li>\n<li>Now we will make a call to the service url of our application to get the Service Ticket.<\/li>\n<li>On success you will get a Service Ticket<\/li>\n<li>If you have service the Service Token, \u00a0then you have successfully authenticated the user.<\/li>\n<li>Save this service ticket in a cookie or session, since a service ticket can be used only once<\/li>\n<\/ul>\n<p>Following the above steps, we have authenticated the user for say domain :<\/p>\n<p>Now, to authenticate our another server say you need to share the TGT that we got in step-1, we will have to just validate the TGT and it will produce the Service Ticket.<\/p>\n<p>Hence the user will not have to enter his credentials again. By sharing the TGT you can use Single Sign On for multiple applications, you can also use SSO by this approach for different domain, by sharing the TGT in header.<\/p>\n<p>Use the following code to get TGT<\/p>\n<pre class=\"code highlight\"><code><span id=\"LC82\" class=\"line\"> <span class=\"n\">String<\/span> <span class=\"nf\">getTicketGrantingTicket<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">server<\/span><span class=\"o\">,<\/span> <span class=\"n\">String<\/span> <span class=\"n\">username<\/span><span class=\"o\">,<\/span> <span class=\"n\">String<\/span> <span class=\"n\">password<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC83\" class=\"line\">    <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC84\" class=\"line\">        <span class=\"n\">HttpClient<\/span> <span class=\"n\">client<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">HttpClient<\/span><span class=\"o\">()<\/span><\/span>\r\n<span id=\"LC85\" class=\"line\">        <span class=\"n\">PostMethod<\/span> <span class=\"n\">post<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">PostMethod<\/span><span class=\"o\">(<\/span><span class=\"n\">server<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC86\" class=\"line\">        <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">setRequestBody<\/span><span class=\"o\">([<\/span><span class=\"k\">new<\/span> <span class=\"n\">NameValuePair<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"username\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">username<\/span><span class=\"o\">),<\/span><span class=\"k\">new<\/span> <span class=\"n\">NameValuePair<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"password\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">password<\/span><span class=\"o\">)].<\/span><span class=\"na\">toArray<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">NameValuePair<\/span><span class=\"o\">[<\/span><span class=\"mi\">2<\/span><span class=\"o\">]))<\/span><\/span>\r\n<span id=\"LC87\" class=\"line\">        <span class=\"k\">try<\/span><\/span>\r\n<span id=\"LC88\" class=\"line\">        <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC89\" class=\"line\">            <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"na\">executeMethod<\/span><span class=\"o\">(<\/span><span class=\"n\">post<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC90\" class=\"line\">            <span class=\"n\">String<\/span> <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">getResponseBodyAsString<\/span><span class=\"o\">()<\/span><\/span>\r\n<span id=\"LC91\" class=\"line\">            <span class=\"k\">switch<\/span> <span class=\"o\">(<\/span><span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">getStatusCode<\/span><span class=\"o\">())<\/span><\/span>\r\n<span id=\"LC92\" class=\"line\">            <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC93\" class=\"line\">                <span class=\"k\">case<\/span> <span class=\"mi\">201<\/span><span class=\"o\">:<\/span><\/span>\r\n<span id=\"LC94\" class=\"line\">                    <span class=\"n\">Matcher<\/span> <span class=\"n\">matcher<\/span> <span class=\"o\">=<\/span> <span class=\"n\">Pattern<\/span><span class=\"o\">.<\/span><span class=\"na\">compile<\/span><span class=\"o\">(<\/span><span class=\"s2\">\".*action=\\\".*\/(.*?)\\\".*\"<\/span><span class=\"o\">).<\/span><span class=\"na\">matcher<\/span><span class=\"o\">(<\/span><span class=\"n\">response<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC95\" class=\"line\">                    <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">matcher<\/span><span class=\"o\">.<\/span><span class=\"na\">matches<\/span><span class=\"o\">())<\/span><\/span>\r\n<span id=\"LC96\" class=\"line\">                        <span class=\"k\">return<\/span> <span class=\"n\">matcher<\/span><span class=\"o\">.<\/span><span class=\"na\">group<\/span><span class=\"o\">(<\/span><span class=\"mi\">1<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC97\" class=\"line\">                    <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">warning<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"Successful ticket granting request, but no ticket found!\"<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC98\" class=\"line\">                    <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"Response (1k): \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">substring<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"na\">min<\/span><span class=\"o\">(<\/span><span class=\"mi\">1024<\/span><span class=\"o\">,<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">length<\/span><span class=\"o\">())))<\/span><\/span>\r\n<span id=\"LC99\" class=\"line\">                    <span class=\"k\">break<\/span><\/span>\r\n<span id=\"LC100\" class=\"line\">                <span class=\"nl\">default:<\/span><\/span>\r\n<span id=\"LC101\" class=\"line\">                    <span class=\"n\">println<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"Invalid response code (${post.getStatusCode()}) from CAS server!\"<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC102\" class=\"line\">                    <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"Response: ${response}\"<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC103\" class=\"line\">                    <span class=\"k\">break<\/span><\/span>\r\n<span id=\"LC104\" class=\"line\">            <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC105\" class=\"line\">        <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC106\" class=\"line\">        <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"kd\">final<\/span> <span class=\"n\">IOException<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC107\" class=\"line\">        <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC108\" class=\"line\">            <span class=\"n\">println<\/span> <span class=\"s2\">\"::::::::::::EXCEPTION ${e.printStackTrace()}\"<\/span><\/span>\r\n<span id=\"LC109\" class=\"line\">            <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">warning<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">())<\/span><\/span>\r\n<span id=\"LC110\" class=\"line\">        <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC111\" class=\"line\">        <span class=\"k\">finally<\/span><\/span>\r\n<span id=\"LC112\" class=\"line\">        <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC113\" class=\"line\">            <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">releaseConnection<\/span><span class=\"o\">()<\/span><\/span>\r\n<span id=\"LC114\" class=\"line\">        <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC115\" class=\"line\">        <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><\/span>\r\n<span id=\"LC116\" class=\"line\">    <span class=\"o\">}<\/span><\/span><\/code><\/pre>\n<p>You can use the following code to get the Service Ticket<\/p>\n<pre class=\"code highlight\"><code><span id=\"LC25\" class=\"line\"><span class=\"n\">String<\/span> <span class=\"nf\">getServiceTicket<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span> <span class=\"n\">server<\/span><span class=\"o\">,<\/span> <span class=\"n\">String<\/span> <span class=\"n\">ticketGrantingTicket<\/span><span class=\"o\">,<\/span> <span class=\"n\">String<\/span> <span class=\"n\">service<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC26\" class=\"line\">    <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC27\" class=\"line\">        <span class=\"k\">if<\/span> <span class=\"o\">(!<\/span><span class=\"n\">ticketGrantingTicket<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC28\" class=\"line\">            <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><\/span>\r\n<span id=\"LC29\" class=\"line\">        <span class=\"n\">HttpClient<\/span> <span class=\"n\">client<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">HttpClient<\/span><span class=\"o\">()<\/span><\/span>\r\n<span id=\"LC30\" class=\"line\">        <span class=\"n\">PostMethod<\/span> <span class=\"n\">post<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">PostMethod<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"$server\/$ticketGrantingTicket\"<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC31\" class=\"line\">        <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">setRequestBody<\/span><span class=\"o\">([<\/span><span class=\"k\">new<\/span> <span class=\"n\">NameValuePair<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"service\"<\/span><span class=\"o\">,<\/span> <span class=\"n\">service<\/span><span class=\"o\">)].<\/span><span class=\"na\">toArray<\/span><span class=\"o\">(<\/span><span class=\"k\">new<\/span> <span class=\"n\">NameValuePair<\/span><span class=\"o\">[<\/span><span class=\"mi\">1<\/span><span class=\"o\">]))<\/span><\/span>\r\n<span id=\"LC32\" class=\"line\">        <span class=\"k\">try<\/span><\/span>\r\n<span id=\"LC33\" class=\"line\">        <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC34\" class=\"line\">            <span class=\"n\">client<\/span><span class=\"o\">.<\/span><span class=\"na\">executeMethod<\/span><span class=\"o\">(<\/span><span class=\"n\">post<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC35\" class=\"line\">            <span class=\"n\">String<\/span> <span class=\"n\">response<\/span> <span class=\"o\">=<\/span> <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">getResponseBodyAsString<\/span><span class=\"o\">()<\/span><\/span>\r\n<span id=\"LC36\" class=\"line\">            <span class=\"k\">switch<\/span> <span class=\"o\">(<\/span><span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">getStatusCode<\/span><span class=\"o\">())<\/span><\/span>\r\n<span id=\"LC37\" class=\"line\">            <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC38\" class=\"line\">                <span class=\"k\">case<\/span> <span class=\"mi\">200<\/span><span class=\"o\">:<\/span><\/span>\r\n<span id=\"LC39\" class=\"line\">                    <span class=\"k\">return<\/span> <span class=\"n\">response<\/span><\/span>\r\n<span id=\"LC40\" class=\"line\">                <span class=\"nl\">default:<\/span><\/span>\r\n<span id=\"LC41\" class=\"line\">                    <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">warning<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"Invalid response code ( ${post.getStatusCode()} ) from CAS server!\"<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC42\" class=\"line\">                    <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">info<\/span><span class=\"o\">(<\/span><span class=\"s2\">\"Response (1k): \"<\/span> <span class=\"o\">+<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">substring<\/span><span class=\"o\">(<\/span><span class=\"mi\">0<\/span><span class=\"o\">,<\/span> <span class=\"n\">Math<\/span><span class=\"o\">.<\/span><span class=\"na\">min<\/span><span class=\"o\">(<\/span><span class=\"mi\">1024<\/span><span class=\"o\">,<\/span> <span class=\"n\">response<\/span><span class=\"o\">.<\/span><span class=\"na\">length<\/span><span class=\"o\">())))<\/span><\/span>\r\n<span id=\"LC43\" class=\"line\">                    <span class=\"k\">break<\/span><\/span>\r\n<span id=\"LC44\" class=\"line\">            <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC45\" class=\"line\">        <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC46\" class=\"line\">        <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"kd\">final<\/span> <span class=\"n\">IOException<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span><\/span>\r\n<span id=\"LC47\" class=\"line\">        <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC48\" class=\"line\">            <span class=\"n\">LOG<\/span><span class=\"o\">.<\/span><span class=\"na\">warning<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">())<\/span><\/span>\r\n<span id=\"LC49\" class=\"line\">        <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC50\" class=\"line\">        <span class=\"k\">finally<\/span><\/span>\r\n<span id=\"LC51\" class=\"line\">        <span class=\"o\">{<\/span><\/span>\r\n<span id=\"LC52\" class=\"line\">            <span class=\"n\">post<\/span><span class=\"o\">.<\/span><span class=\"na\">releaseConnection<\/span><span class=\"o\">()<\/span><\/span>\r\n<span id=\"LC53\" class=\"line\">        <span class=\"o\">}<\/span><\/span>\r\n<span id=\"LC54\" class=\"line\">        <span class=\"k\">return<\/span> <span class=\"kc\">null<\/span><\/span>\r\n<span id=\"LC55\" class=\"line\">    <span class=\"o\">}<\/span><\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You can check How to set up CAS Rest api with JDBC Authentication.\u00a0for setting up CAS server for your application. Now if you want to test if your CAS server is working properly for REST calls then you can use the following code and you need to check for the following things. You need to [&hellip;]<\/p>\n","protected":false},"author":173,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0},"categories":[1],"tags":[2764,1338],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/30096"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/173"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=30096"}],"version-history":[{"count":0,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/30096\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=30096"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=30096"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=30096"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}