Integrating CAS Proxying with Forms Authentication in ASP.Net 2.0
...
Panel | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
| style |
:id=hl|style=background-color:yellow |
}%>
{span} |
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
If User.Identity.IsAuthenticated Then
If Not String.IsNullOrEmpty(CASAuthentication.ProxyAppResponse) Then
Response.Write(String.Concat("Proxied App Response: ", CASAuthentication.ProxyAppResponse))
EndIf
End If
End Sub
Protected Sub btnRunTest_Click(ByVal sender As Object,ByVal e As System.EventArgs)
'First, let's add some proxy arguments to send to the CAS proxy
CASAuthentication.AddProxyArgument("arg1", "hello")
CASAuthentication.AddProxyArgument("arg2", "world")
If Not CASAuthentication.InvokeCASProxy(ProxyAppUrl:="{url_to_your_CAS_Proxy_Application}", _
pgtUrl:="{secure_url_to_your_CAS_Callback_Url_Application}", _
HttpMethodPost:= False) Then
Response.Write(CASAuthentication.LastError)
Return
EndIf
End Sub
</script>
<html>
<head>
<title>Test calling a CAS Proxy</title>
</head>
<body>
<p><a href="LogOut.aspx">Log out of CAS</a></p>
<p><asp:Button ID="btnRunTest"runat="server"OnClick="btnRunTest_Click"Text="Call Test Proxy" /></p>
</body>
</html>
The CAS callback Url (This would be the same application page specified in the pgtUrl attribute in the call to InvokeCASProxy method shown above) - This assumes that your main application (the CAS proxier) and callback Url are part of the same application so that they can share application specific variables. If the callback Url is NOT part of the same application, then you must handle storing/retrieving the pgtIou/pgtId pair yourself. (e.g. store them in an external database).
...
Panel | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Span | | style |
Wiki Markup |
---|
{span:id=hl|style=background-color:yellow |
}%>
{span} |
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs)
Dim pgtIou As String= Request.QueryString.Get("pgtIou")
DimpgtId As String= Request.QueryString.Get("pgtId")
If Not String.IsNullOrEmpty(pgtIou)And _
Not String.IsNullOrEmpty(pgtId) Then
'We have a pgtIou/pgtId pair sent from CAS server
'Now call the AssignPgtIDForCallingProxy method of the CASAuthentication class
'this will store the pgtId in an application variable with it's name the value of the pgtIou
CASAuthentication.AssignPgtIDForCallingProxy(pgtIou, pgtId)
Else
Response.Write("No pgtIou/pgtId pair!")
End If
End Sub
</script>
<html>
<head>
<title>Proxy Callback Url Page</title>
</head>
<body>
</body>
</html>
The CAS Proxy (This would be the same application specified in the ProxyAppUrl attribute in the call to InvokeCASProxy method shown above)
Panel | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
| |||||||||||
Span | | style |
Wiki Markup |
---|
{span:id=hl|style=background-color:yellow |
}%>
{span} |
<script runat="server">
Protected Sub Page_Load(ByVal sender As Object,ByVal e As System.EventArgs)
If CASAuthentication.IsAuthenticated Then
Response.Write("Welcome " & CASAuthentication.CalNetID & ", you have been successfully authenticated with CAS!")
Response.Write("<BR>")
Dim proxyArgs As StringBuilder = New StringBuilder
Dim proxyArgKey As String= String.Empty
'
'Since this is the proxy application, we will check it's arguments it was sent
'Normally we would know if the arguments were sent in the query string or Form post
'but for the purposes of this example, we will check both
'
If Request.QueryString.Count > 0 Then
'get arguments from querystring object
For Each proxyArgKey In Request.QueryString
proxyArgs.AppendFormat("{0}={1} (query string)<br>", proxyArgKey, Request.QueryString.Get(proxyArgKey))
Next
Else
'get arguments from form object
For Each proxyArgKey In Request.Form
proxyArgs.AppendFormat("{0}={1} (form post)<br>", proxyArgKey, Request.Form.Get(proxyArgKey))
Next
EndIf
Response.Write(proxyArgs.ToString)
Response.Write("<BR>")
If Not String.IsNullOrEmpty(CASAuthentication.Proxies) Then
Response.Write(CASAuthentication.Proxies)
Response.Write("<BR>")
End If
End If
End Sub
</script>
<html>
<head>
<title>Test CAS Proxied Application</title>
</head>
<body>
<a href="LogOut.aspx">Log out of CAS</a>
</body>
</html>