C# C语言中的D2L Brightspace SSO身份验证#

C# C语言中的D2L Brightspace SSO身份验证#,c#,asp.net,desire2learn,valence,C#,Asp.net,Desire2learn,Valence,我已经能够使用Boomerang客户端发布soap请求,以返回过期的GUID(对于SSO) 我现在正试图在C#ASP.NET中实现同样的功能。我得到了一个工作的经典ASP示例,该示例按预期工作: <% Option Explicit Dim objHttp Dim xmlData Dim GUIDUrl Dim SSOUrl Dim redirectURL Dim guidType Dim orgId Dim installCode Dim TTL Dim key Dim user

我已经能够使用Boomerang客户端发布soap请求,以返回过期的GUID(对于SSO)

我现在正试图在C#ASP.NET中实现同样的功能。我得到了一个工作的经典ASP示例,该示例按预期工作:

<%


Option Explicit

Dim objHttp
Dim xmlData
Dim GUIDUrl
Dim SSOUrl
Dim redirectURL
Dim guidType
Dim orgId
Dim installCode
Dim TTL
Dim key
Dim user

' ====================================
' CONFIGURE THIS SECTION
' ====================================
  GUIDUrl = "https://{URL}/d2l/guids/D2L.Guid.2.asmx"
  SSOUrl  = "https://{URL}/d2l/lp/auth/login/ssoLogin.d2l"
  guidType = "SSO"
  orgId = "12947"
  installCode = "{Please Set this Value}"
  TTL = "30"
  key = "{Please Set this Value}"
  user = "{Replace with an existing username or OegDefinedId}"
' ====================================
' END OF CONFIGURATION
' ====================================

  Dim strResult, getusername

    strResult = GUIDUrl & "/GenerateExpiringGuid" '?guidType=" & guidType & "&orgId=" & orgId & "&installCode=" & installCode & "&TTL=" & TTL & "&data=" & user & "&key=" & key


Set objHttp = Server.CreateObject("Microsoft.XMLHTTP") 
  objHTTP.open "POST", strResult,false
  objHTTP.setRequestHeader "Content-Type","application/x-www-form-urlencoded"

objHttp.Send "guidType=" & guidType & "&orgId=" & orgId & "&installCode=" & installCode & "&TTL=" & TTL & "&data=" & user & "&key=" & key
  strResult=objHTTP.responseText



If objHttp.Status = 200 Then 
    Set xmlData = objHttp.ResponseXML
    RedirectURL = SSOUrl & "?username=" & user & "&guid=" & xmlData.childNodes(1).text
    Response.Redirect (RedirectURL)
End If 
Set objHttp = Nothing 


%>

尝试使用此GUID(如上所述)会导致出现“未授权”页面:“错误:未授权”。您无权查看您试图访问的页面。

如果您收到来自Guidull web服务的200响应,那么我将查看响应的编码

还要确保您在响应中看到了正确的XML节点

xmlData.childNodes(1).text与xmlDoc.DocumentElement.LastChild.InnerText的对比谢谢。编写了以下代码来解决此问题:

    string user = "{Replace with an existing userid}";

    var GUIDUrl = "https://{URL}/d2l/guids/D2L.Guid.2.asmx";
    var AuthURL = "https://{URL}/d2l/lp/auth/login/ssoLogin.d2l";

    // Load XML file (a SOAP 1.2 request as per asmx example provided), containing key/pair values
    string filepath = HttpContext.Current.Request.MapPath("~/d2l_send.xml");
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(filepath);

    // Encode XML and post request
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(GUIDUrl);
    byte[] requestBytes = Encoding.ASCII.GetBytes(xmldoc.InnerXml);
    req.Method = "POST";
    req.ContentType = "text/xml;charset=utf-8";
    req.ContentLength = requestBytes.Length;
    Stream requestStream = req.GetRequestStream();
    requestStream.Write(requestBytes, 0, requestBytes.Length);
    requestStream.Close();

    // Get response from server
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.Default);
    string backstr = sr.ReadToEnd();

    // Load response into XML document class instance
    XmlDocument xmlResult = new XmlDocument();
    xmlResult.LoadXml(backstr);
    XmlElement root = xmlResult.DocumentElement;
    XmlNodeList GUIDNode = root.GetElementsByTagName("GenerateExpiringGuidResult");

    // Get GUID
    string innerObject = Server.HtmlEncode(GUIDNode[0].InnerXml);
    string strRedirect = AuthURL + "?guid=" + innerObject + "&userid=" + user;

    //lblResult.Text = "<a href='" + strRedirect + "'>Click here</a>"; 

    sr.Close();
    res.Close();

    Response.Redirect(strRedirect);
string user=“{替换为现有用户ID}”;
var GUIDUrl=“https://{URL}/d2l/guids/d2l.Guid.2.asmx”;
var AuthURL=“https://{URL}/d2l/lp/auth/login/ssoLogin.d2l”;
//加载包含密钥/对值的XML文件(根据提供的asmx示例,是SOAP 1.2请求)
字符串filepath=HttpContext.Current.Request.MapPath(“~/d2l_send.xml”);
XmlDocument xmldoc=新的XmlDocument();
Load(filepath);
//编码XML和post请求
HttpWebRequest req=(HttpWebRequest)WebRequest.Create(GUIDUrl);
byte[]requestBytes=Encoding.ASCII.GetBytes(xmldoc.InnerXml);
请求方法=“POST”;
req.ContentType=“text/xml;charset=utf-8”;
req.ContentLength=requestBytes.Length;
Stream requestStream=req.GetRequestStream();
Write(requestBytes,0,requestBytes.Length);
requestStream.Close();
//从服务器获取响应
HttpWebResponse res=(HttpWebResponse)req.GetResponse();
StreamReader sr=新的StreamReader(res.GetResponseStream(),Encoding.Default);
字符串backstr=sr.ReadToEnd();
//将响应加载到XML文档类实例中
XmlDocument xmlResult=新的XmlDocument();
LoadXml(backstr);
XmlElement root=xmlResult.DocumentElement;
XmlNodeList GUIDNode=root.GetElementsByTagName(“GenerateExpiringGuidResult”);
//获取GUID
字符串innerObject=Server.HtmlEncode(GUIDNode[0].InnerXml);
字符串strRedirect=AuthURL+“?guid=“+innerObject+”&userid=“+user;
//lblResult.Text=“”;
高级关闭();
res.Close();
响应.重定向(strRedirect);
    string user = "{Replace with an existing userid}";

    var GUIDUrl = "https://{URL}/d2l/guids/D2L.Guid.2.asmx";
    var AuthURL = "https://{URL}/d2l/lp/auth/login/ssoLogin.d2l";

    // Load XML file (a SOAP 1.2 request as per asmx example provided), containing key/pair values
    string filepath = HttpContext.Current.Request.MapPath("~/d2l_send.xml");
    XmlDocument xmldoc = new XmlDocument();
    xmldoc.Load(filepath);

    // Encode XML and post request
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(GUIDUrl);
    byte[] requestBytes = Encoding.ASCII.GetBytes(xmldoc.InnerXml);
    req.Method = "POST";
    req.ContentType = "text/xml;charset=utf-8";
    req.ContentLength = requestBytes.Length;
    Stream requestStream = req.GetRequestStream();
    requestStream.Write(requestBytes, 0, requestBytes.Length);
    requestStream.Close();

    // Get response from server
    HttpWebResponse res = (HttpWebResponse)req.GetResponse();
    StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.Default);
    string backstr = sr.ReadToEnd();

    // Load response into XML document class instance
    XmlDocument xmlResult = new XmlDocument();
    xmlResult.LoadXml(backstr);
    XmlElement root = xmlResult.DocumentElement;
    XmlNodeList GUIDNode = root.GetElementsByTagName("GenerateExpiringGuidResult");

    // Get GUID
    string innerObject = Server.HtmlEncode(GUIDNode[0].InnerXml);
    string strRedirect = AuthURL + "?guid=" + innerObject + "&userid=" + user;

    //lblResult.Text = "<a href='" + strRedirect + "'>Click here</a>"; 

    sr.Close();
    res.Close();

    Response.Redirect(strRedirect);