我开发了一个C#桌面应用程序,可以向客户的服务器(通常是Documentum/SharePoint/Alfreco/NemakiWare/etc基于HTTPS的服务器)发出HTTPS请求。
一些客户要求我们支持他们受CA SSO(Siteminder的新名称)保护的服务器。
问题:我需要做什么才能允许我的应用程序使用受CA SSO保护的服务器发送HTTPS请求(并接收响应)?
与Mohit的答案相同,但可以用更简单的代码来完成:
//Make initial request for SM to give you some cookies and the authentication URI
RestClient client = new RestClient("http://theResourceDomain/myApp");
client.CookieContainer = new CookieContainer();
IRestResponse response = client.Get(new RestRequest("someProduct/orders"));
//Now add credentials.
client.Authenticator = new HttpBasicAuthenticator("username", "password");
//Get resource from the SiteMinder URI which will redirect back to the API URI upon authentication.
response = client.Get(new RestRequest(response.ResponseUri));
要使用CA SSO进行身份验证,然后连接到所需的URL,我们需要访问配置为使用CA SSO身份验证的web服务器上的受保护资源:
这通过以下步骤完成:
打开到受保护资源URI的连接(本例中为HTTP请求)。由于请求尚未通过身份验证,CA SSO代理将发出重定向到登录页面。在代码中,AllowAutoRedirect设置为false。这一点很重要,因为在下面的步骤3中,后续发布登录数据时需要重定向URL。如果AllowAutoRedirect为True,则响应将不包括位置标题,随后将发布到原始URL,然后重新重定向到登录页面。然而,在客户端和服务器之间发生POST,在重定向期间,步骤3的请求的有效负载中携带的任何POST数据都将丢失。
Dim request As HttpWebRequest
Dim response As HttpWebResponse
Dim url As String = PROTECTED_URL
request = WebRequest.Create(url)
request.AllowAutoRedirect = False
response = request.GetResponse
' make sure we have a valid response
If response.StatusCode <> HttpStatusCode.Found Then
Throw New InvalidProgramException
End If
' get the login page
url = response.Headers("Location")
request = WebRequest.Create(url)
request.AllowAutoRedirect = False
response = request.GetResponse
下一步涉及创建HTTPS请求,将所有表单数据(包括用户ID和密码)发回服务器。身份验证代理的目的是通过验证用户的用户名和密码来验证用户的身份。因此,它们的URL自然使用SSL(安全套接字层)并为我们加密,因此我们不需要在程序中进一步加密。然而,POST数据的格式很有趣,因为有两种选择。示例程序使用更简单的方法将内容类型设置为application/x-www-form-urlencoded。这里,POST数据的格式类似于查询字符串,并作为下一个请求的一部分发送。
Dim postData As String
postData = ""
For Each inputName As String In tags.Keys
If inputName.Substring(0, 2).ToLower = "sm" Then
postData &= inputName & "=" & _
HttpUtility.UrlEncode(tags(inputName)) & "&"
End If
Next
postData += "postpreservationdata=&"
postData += "USER=" + HttpUtility.UrlEncode(USERNAME) & "&"
postData += "PASSWORD=" + HttpUtility.UrlEncode(PASSWORD)
request = WebRequest.Create(url)
cookies = New CookieContainer
request.CookieContainer = cookies
request.ContentType = FORM_CONTENT_TYPE
request.ContentLength = postData.Length
request.Method = POST_METHOD
request.AllowAutoRedirect = False ' Important
Dim sw As StreamWriter = New StreamWriter(request.GetRequestStream())
sw.Write(postData)
sw.Flush()
sw.Close()
response = request.GetResponse
我的桌面应用程序正在尝试连接到使用SiteMinder SSO保护的web应用程序。每次桌面应用程序尝试访问web应用程序时,SiteMinder都会丢弃它。 在HTTP标头请求中,是否有任何特定参数要传递给使用SiteMinder保护的web应用程序。
我目前正在尝试使用Siteminder对web应用程序的登录页面进行加载测试。我尝试使用JMeter的HTTP cookie管理器,但没有成功!继续重定向到登录页面! 你有关于这种情况的示例或教程的链接吗?!
我有几个Azure Functions,我想使用Azure AD对其应用身份验证。在用户模拟身份验证方面,我已经成功做到了这一点。但不幸的是,我无法从尝试访问Azure Functions的守护程序应用程序中获得同样的工作。 我的守护程序应用程序在Azure AD中注册,并公开应用程序范围。基本上,我有其他构建为应用程序服务的API,可以从守护程序应用程序成功地进行身份验证。我为Azure功能应用
我目前正在从事一个Java桌面应用程序项目。这是一个现有的应用程序,我被要求修改它。 他们说我必须使用RESTful Web服务将数据从桌面应用程序发送到Web应用程序。所以我搜索了一些关于RESTful Web服务的信息(因为我对那类东西不熟悉,对Java也不熟悉),我看到一些使用RESTful Web服务的非Web应用程序,但非Web应用程序是Maven项目。我需要修改的现有java桌面应用程
问题内容: 我正在使用Spring Security在Grails应用程序中托管REST Web服务,即: 我是从Android应用程式呼叫它。(调用不安全的服务就可以了。) 为了调用该服务,我正在手动建立一个request()并使用来执行它。 我想知道最佳实践是什么,以及如何实施它们……具体来说,我应该: 执行一次登录,以检索JSESSION_ID,然后将包含它的标头添加到每个后续请求的Http
问题内容: 我正在尝试连接到受密码保护且URL为https的Web服务。在脚本发出请求之前,我不知道如何进行身份验证。似乎在我定义服务后便发出了请求。例如,如果我输入: 然后转到浏览器上的站点,我得到: 如果尝试将服务定义为Soap Server,例如: 我得到: 我还没有尝试发送原始请求信封来查看服务器返回的内容,但这可能是一种解决方法。但是我希望有人能告诉我如何使用php内置类进行设置。我尝试