using System;
using System.Data;
using System.IO;
using System.Text;
using System.Net;
using System.Configuration;
using System.Collections.Generic;
public partial class ssoLogin : System.Web.UI.Page
{
private static void SetBasicAuthHeader(HttpWebRequest req, String userName,
String userPassword)
{
string authInfo = userName + ":" + userPassword;
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
req.Headers["Authorization"] = "Basic " + authInfo;
}
private static void SetAgentIdCookie(HttpWebRequest req, String agentid)
{
if (agentid != null)
{
req.Headers["Cookie"] = "agentid=" + agentid;
}
}
private static string GetTokenServiceUrl(string pingConnectToken)
{
return "${tokenServiceBaseUrl}/sso/TXS/2.0/2/"+ pingConnectToken;
}
/**
* The restApiKey value is the REST API Client Secret (the password/secret associated with your REST API Client ID). You will need
* to uncomment the String restApiKey statement and replace the empty string in the sample below with your REST API Client Secret.
* For example: String restApiKey = "mySecretApiPassword";
*
* The restAuthUsername value is the REST API Client ID (a GUID) automatically assigned to your account in the PingOne admin portal
* on the Account > Integration page.
* You will need to replace the restAuthUsername value in "${restAuthUsername}" in the sample below with your REST API Client ID.
* For example: SetBasicAuthHeader(request, "5f6ce45e-1a00-488e-8519-7c9946cb6379", restApiKey);
*/
protected void Page_Load(object sender, EventArgs e)
{
String tokenId = Request.QueryString["tokenid"];
String agentId = Request.QueryString["agentid"];
HttpWebRequest request = WebRequest.Create(GetTokenServiceUrl(tokenId))
as HttpWebRequest;
// Specify this value at http://admin.pingidentity.com
//String restApiKey = "";
SetBasicAuthHeader(request, "${restAuthUsername}", restApiKey);
SetAgentIdCookie(request, agentId);
request.Method = "GET";
request.ContentType = "text/plain;charset=utf-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
String content = reader.ReadToEnd();
String [] lines = content.Split('\\n');
Dictionary<string, string> properties = new Dictionary<string, string>();
foreach (string line in lines )
{
if (line.Contains("="))
{
properties.Add(line.Split('=')[0], line.Split('=')[1]);
}
}
String subject = properties["pingone.subject"];
String idpId = properties["pingone.idp.id"];
CreateUserSession(subject, idpId);
}
protected void CreateUserSession(string subject, string idpId)
{
// Implement Me! Must validate that subject belongs to this idpId
Response.Write("<p>Welcome, " + subject + "</p>");
}
}