サポート チケット情報を使用して、サポート カスタマーと WebEx を開くための小さなツールを作成しています。サイトがユーザー名/パスワードを使用していたときは機能させることができましたが、現在は SSO を使用しています。WebEx サーバーは、SSO を受け入れるように既にセットアップされています (私ではなく IT マネージャーによって)。
WebEx リファレンス (以下にリンク) は詳細を説明しておらず、公式サイトの WebEx 開発者フォーラムは非常に休眠状態であり、この件に関する回答がないため、ここで運試しをすることにしました。
公式フォーラムに同じ質問を投稿しました
以下のコードを実際に機能させる方法を知っている人はいますか? タグに入る<samlResponse>
ものと、コード内の以下の行を機能させるものに置き換えます。
<samlResponse>samlResponse message will go here</samlResponse>
ドキュメントのSAML アサーション(以下を参照) は何を意味しますか?
今までわかったこと
WebEx のXML-API ドキュメント(ページ 68) では、次のように説明されています。
3.1 ユーザー認証
AuthenticateUser API は、ユーザー パスワードの代わりに SAML アサーションを受け入れます。返された は、Super Admin で定義されているセッション期間を使用せずに、後続の XML API 要求に使用できます。これは、認証の現在の要件に取って代わることができます。...
次のスキーマ ダイアグラムは、AuthenticateUser 要求メッセージの要素構造を示しています。
次に、XML スキーマ図とサンプルを提供します。
サンプルの .NET コード (SAML を使用しない) を参照して、次のコードを思いつきました。
string strXMLServer = "https://varonis.webex.com/WBXService/XMLService";
WebRequest request = WebRequest.Create(strXMLServer);
// Set the Method property of the request to POST.
request.Method = "POST";
// Set the ContentType property of the WebRequest.
request.ContentType = "application/x-www-form-urlencoded";
// Create POST data and convert it to a byte array.
Func<StringBuilder, StringBuilder> webExXML =
bodySB => new StringBuilder(1024) // Currently 294 bytes in length
.AppendLine("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>")
.Append("<serv:message xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"")
.Append(" xmlns:serv=\"http://www.webex.com/schemas/2002/06/service\"")
.Append(" xsi:schemaLocation=\"http://www.webex.com/schemas/2002/06/service")
.Append(" http://www.webex.com/schemas/2002/06/service/service.xsd\">")
.AppendLine("<header>")
.AppendLine("<securityContext>")
.AppendLine("<siteName>siteName</siteName>")
.AppendLine("<webExID>username</webExID>")
.AppendLine("<password></password>")
.AppendLine("<partnerID></partnerID>")
.AppendLine("</securityContext>")
.AppendLine("</header>")
.AppendLine()
.AppendLine("<body>")
.Append(bodySB)
.AppendLine()
.AppendLine("</body>")
.AppendLine("</serv:message>");
var xmlAuthBodyContent = new StringBuilder()
.AppendLine("<bodyContent ")
.AppendLine("xsi:type=\"java:com.webex.service.binding.user.AuthenticateUser\">")
.AppendLine("<samlResponse>samlResponse message will go here</samlResponse>")
.AppendLine("</bodyContent>");
byte[] byteArray = Encoding.UTF8.GetBytes(webExXML(xmlAuthBodyContent).ToString());
// Set the ContentLength property of the WebRequest.
request.ContentLength = byteArray.Length;
// Get the request stream.
Stream dataStream = request.GetRequestStream();
// Write the data to the request stream.
dataStream.Write(byteArray, 0, byteArray.Length);
// Close the Stream object.
dataStream.Close();
// Get the response.
WebResponse response = request.GetResponse();
DataSet DSResponse = new DataSet();
DSResponse.ReadXml(response.GetResponseStream());
DSResponse.GetXml().Dump();
私が得る結果は次のとおりです。
<serv:message xmlns:serv="http://www.webex.com/schemas/2002/06/service">
<serv:header>
<serv:response>
<serv:result>FAILURE</serv:result>
<serv:reason>Authentication Server can't generate a valid session ticket</serv:reason>
<serv:gsbStatus>PRIMARY</serv:gsbStatus>
<serv:exceptionID>030048</serv:exceptionID>
<serv:subErrors>
<serv:subError>
<serv:exceptionID>AS0062</serv:exceptionID>
<serv:reason>Validate assertion failed</serv:reason>
<serv:value />
</serv:subError>
</serv:subErrors>
</serv:response>
</serv:header>
<serv:body>
<serv:bodyContent />
</serv:body>
</serv:message>