C# C语言中的D2L Brightspace SSO身份验证#
我已经能够使用Boomerang客户端发布soap请求,以返回过期的GUID(对于SSO) 我现在正试图在C#ASP.NET中实现同样的功能。我得到了一个工作的经典ASP示例,该示例按预期工作: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
<%
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);