iis如何使用saml2.0访问adfs
how Iis USES saml2.0 to access adfs
IIS如何使用saml2.0访问adfs?
在我看来,IIS 需要部署一个 Web 应用程序来访问 adfs,通过使用 saml 2.0 发送请求。
但是直到现在,我还没有找到部署可以发送saml2.0的web应用程序的方法。
是否必须使用 isapi 或 Shibboleth?
Resolution: (1) Shibboleth SP should establish the SSO session/HTTP
login session after extracting the user info from SAML response sent
by SAML IdP. (2) Insert the user info into the SSO session/HTTP login
session. How to insert and fetch Data from Sessions instead of
Database in Asp.net MVC C# provides the instruction on how to insert
data into the HTTP session (at IIS) and extract data from the HTTP
session (at Glassfish).
//In IIS Session["HTTP_MAIL"] = Request.Headers["HTTP_MAIL"];
//In Glassfish after HTTP redirect string user_email =
Session["HTTP_MAIL"];
感谢您的回答!
我先说说我知道的吧。如有不妥之处请指出
Shibboleth SP保存从SAML Idp(这次是ADFS)得到的SAML响应所属的值到三个地方(※),我们可以看到
https://SP 的域名 name/Shibboleth.sso/Session
』※
①Session
②服务器变量
③请求头
参考SP's AttributeAccess
Shibboleth SP保存值后,自动跳转到浏览器访问的界面
②Server Variables和③Request Headers中都有信息,所以IIS以上的应用可以通过下面的代码获取
通过邮件和HTTP_MAIL都可以得到值。
<% @ Page Language="C#" %>
<%
Response.Write("<h3>Server Variables</h3>");
Response.Write("Name = " + Request["name"] + "<br>");
Response.Write("Email = " + Request["mail"] + "<br>");
Response.Write("Tel = " + Request["tel"] + "<br>");
%>
结果是:
Server Variables
Name = tom
Email = tom@yahoo.com
Tel = 0251-4584-635
问题是什么时候使用HTTP Redirect(HTTP Rewrite等方式也可以),
上面的值是怎么传给glassfish的~
参考你的回答,我做了以下事情~
- 修改iis上面的程序为:
<% @ Page Language="C#" %>
<%
Response.Write("<h3>Server Variables</h3>");
Response.Write("Name = " + Request["name"] + "<br>");
Response.Write("Email = " + Request["mail"] + "<br>");
Response.Write("Tel = " + Request["tel"] + "<br>");
Session["HTTP_MAIL"] = Request["HTTP_MAIL"]; ※set value to Session
Response.Write("Mail2 = " + Session["HTTP_TEST"] + "<br>");
%>
- 为此创建 Glassfish 的应用程序:
@RequestMapping(value = "/info2", method = RequestMethod.GET)
public Object getUserInfo2(HttpSession session, Model model) {
Enumeration<String> headerNames = session.getAttributeNames();
StringBuffer stringBuffer = new StringBuffer();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = (String) session.getAttribute(key);
stringBuffer.append(key + ":" + value + "\n");
}
model.addAttribute("StringBuffer", stringBuffer);
return "index";
}
session.
中没有任何内容
似乎是使用IIS的HTTP重定向功能在应用执行前在IIS上重定向了应用。
换句话说,session 赋值似乎没有被执行
我做对了吗?
问题 #1:
IIS如何使用saml2.0访问adfs?
在我看来,IIS需要部署一个web应用来访问adfs,通过saml 2.0发送请求。
回答:
是的。你是对的。
(1) IIS需要部署一个SAML SP(服务提供商)来向ADFS发送SAML认证请求。
(2) 您需要将 ADFS 配置为 SAML IdP(身份提供者)。
Add ADFS as a SAML identity provider微软官方网站提供了如何将ADFS配置为SAML IdP的说明。
问题 #2:
是否必须使用 isapi 或 Shibboleth?
回答:
您可以在 IIS 上部署 Shibboleth SP(服务提供商)。
Shibboleth SP with IIS的官方link提供了如何在IIS上部署Shibboleth SP的说明。
Follow-up 问题 #1:
最终效果如下:adfs的终点:
iis.*.com/Shibboleth.sso/SAML2/POST
iis.*.com/Shibboleth.sso/SAML2/Artifact
但是adfs返回的是一个post,我没有通过iis端的程序header获取请求中的信息
参考这个网站Shibboleth SP for IIS でSAML対応
如何通过get获取adfs返回的数据
回答:
(1) Shibboleth SP AssertionConsumerService 不为 "GET".
提供 "HTTP-Redirect" endpoint/URL
(I) 你不能 "get the data returned by adfs through get"。
(二)你得通过POST获取adfs返回的数据。
(2)假设您的网站是https://shibbolethiis.int.secioss.work
(I) Shibboleth SP AssertionConsumerService endpoint/URL 由您的 Shibboleth SP 元数据“https://shibbolethiis.int.secioss.work/Shibboleth.sso/Metadata”
展示
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://shibbolethiis.int.secioss.work/Shibboleth.sso/SAML2/POST" index="1"/>
(II) 引用您评论中的 link。即,Shibboleth SP for IIS でSAML対応
「默认网站」を选択し。IISを再启动します。
これでShibboleth-SPの设定は终了です。
以下のURLニ接続し、正稼働しテいるか确认しテください。
https://shibbolethiis.int.secioss.work/Shibboleth.sso/Status
正常の稼働しテいる场合、以下のようなXMLガ返ります。
最后の状态タグの内容ガOKナラ正常desu。
(III) 检查您的网站 Shibbolth SP session
https://shibbolethiis.int.secioss.work/Shibboleth.sso/Session
上面的Shibboleth SP Session URL应该显示ADFS发送的SAML响应携带的用户信息
如果您无法从上述 Shibboleth SP 中找到任何用户信息 Session URL
(III.a) 配置 ADFS 使用 SAML 发送用户信息 attribute/SAML assertion/SAML response
(III.b) 参照 GitHub 存储库中 Shibboleth SP shibboleth-sp-testapp/shibboleth-sp/attribute-map.xml 提供的示例,修改 Shibboleth SP "attribute-map.xml" 以接受 ADFS 发送的 SAML 属性。
通常 Shibboleth SP 使用 SAML 属性,例如 "mail" 属性(例如,ethan.smith@example.com)让用户登录您的网站。
(4) 备注:
(I) How to build and run Shibboleth SAML IdP and SP using Docker container 在 GitHub 存储库中提供了 Shibboleth SP 配置示例。
(II) 为了您的方便,我在上面的 GitHub 存储库中做了一个新的提交,将 ADFS 属性添加到 Shibboleth SP shibboleth-sp-testapp/shibboleth-sp/attribute-map.xml。请注意,我已使用相同的 ADFS 属性成功登录 Box 帐户。
(III)Configuring Attributes for SAML 2.0 and ADFS 3.0 提供了关于Shibboleth SP如何提取ADFS通过"attribute-map.xml"返回的用户info/data的有价值的信息和讨论。
Follow-up 问题 #2:
修改属性后。 XML,访问shibboleth.sso/Session,可以显示如下信息。
Attributes mail: 1 value(s)
tel: 1 value(s)
参考这个网站Shibboleth SP for IIS でSAML対応
5.動作確認
Display the following information
HTTP_MAIL:ya*@cn.*.com
HTTP_TEL:17*
当我通过 iis 的 HTTP 重定向功能将请求 header 重定向到 glassfish 时,如何从请求中获取信息?
回答:
另一个 Whosebug 问题 Getting a Request.Headers value 提供了如何使用 C# 从请求 header 中获取信息的解决方案,例如
if (Request.Headers["HTTP_MAIL"] != null) {
string user_email = Request.Headers["HTTP_MAIL"];
}
Follow-up 问题 #3:
不是问如何在IIS上获取headers,我的问题是如何在glassfish上获取登录信息~换句话说,获取后如何将request-header信息传递给glassfish它来自 iis?我也在glassfish get shibboleth sp attribute on iis里问了一个问题,比他现在的评论更详细
回答:
从网络安全的角度来看,您不能重定向用户信息来为 Glassfish 应用程序建立 HTTP 登录 session。否则,黑客可以使用相同的用户信息登录 Glassfish 应用程序,而无需任何身份验证,例如本地 username/password 身份验证或 third-party SAML 身份验证。
Follow-up 问题 #4:
当使用HTTP Redirect时(HTTP Rewrite等其他方式也可以),上面的值是如何传递给glassfish的?
session.
中没有任何内容
似乎是使用IIS的HTTP重定向功能在应用程序执行前在IIS上重定向应用程序。换句话说,他 session 分配似乎没有执行
我做对了吗?
回答:
(1) Apache、GlassFish、IIS、Jetty 和 Tomcat 可以被视为用于托管 Web 应用程序的并行 Web 服务器。
Top Java Application Servers: Tomcat vs. Jetty vs. GlassFish vs. WildFly
Microsoft IIS vs Apache Tomcat: What are the differences?
Microsoft IIS and Apache Tomcat belong to "Web Servers" category of the tech stack.
Windows Server 2016 可以 运行 IIS 10 网络服务器和 GlassFish 5.1.0 网络服务器,而 IIS 10 网络服务器和 GlassFish 5.1.0 网络服务器可以 运行 它们的自己的网络应用程序。
(2) 从网络安全的角度来看,不同的 Web 应用程序应该在他们的后端服务器(例如 Apache、Glassfish、IIS、JETTY 和 Tomcat)上建立他们的 HTTP 登录 session。用户已通过 third-party SAML IdP(例如 Shibboleth SAML IdP)的身份验证。
因此,您不能将用户信息从 IIS 重定向到 Glassfish,因为 IIS 和 Glassfish 应该为其被授予 Web 应用程序访问权限的用户建立自己不同的 HTTP sessions。
分辨率:
您可以使用 OneLogin Java SAML SP tookit (Code Your Java App to Provide SSO via OneLogin) 为您的 Java-based GlassFish web 应用程序构建 SAML SP。
请注意,您的 Java-based GlassFish Web 应用程序的 OneLogin SAML SP 可以与任何 SAML IdP 通信,包括他们自己的 OneLogin SAML IdP,Shibboleth SAML IdP running on Docker container, or SAML IdP provided by our Zero-Password Authentication and Authorization System。
IIS如何使用saml2.0访问adfs?
在我看来,IIS 需要部署一个 Web 应用程序来访问 adfs,通过使用 saml 2.0 发送请求。
但是直到现在,我还没有找到部署可以发送saml2.0的web应用程序的方法。
是否必须使用 isapi 或 Shibboleth?
Resolution: (1) Shibboleth SP should establish the SSO session/HTTP login session after extracting the user info from SAML response sent by SAML IdP. (2) Insert the user info into the SSO session/HTTP login session. How to insert and fetch Data from Sessions instead of Database in Asp.net MVC C# provides the instruction on how to insert data into the HTTP session (at IIS) and extract data from the HTTP session (at Glassfish).
//In IIS Session["HTTP_MAIL"] = Request.Headers["HTTP_MAIL"];
//In Glassfish after HTTP redirect string user_email = Session["HTTP_MAIL"];
感谢您的回答!
我先说说我知道的吧。如有不妥之处请指出
Shibboleth SP保存从SAML Idp(这次是ADFS)得到的SAML响应所属的值到三个地方(※),我们可以看到 https://SP 的域名 name/Shibboleth.sso/Session
』※ ①Session ②服务器变量 ③请求头 参考SP's AttributeAccess
Shibboleth SP保存值后,自动跳转到浏览器访问的界面
②Server Variables和③Request Headers中都有信息,所以IIS以上的应用可以通过下面的代码获取 通过邮件和HTTP_MAIL都可以得到值。
<% @ Page Language="C#" %>
<%
Response.Write("<h3>Server Variables</h3>");
Response.Write("Name = " + Request["name"] + "<br>");
Response.Write("Email = " + Request["mail"] + "<br>");
Response.Write("Tel = " + Request["tel"] + "<br>");
%>
结果是:
Server Variables
Name = tom
Email = tom@yahoo.com
Tel = 0251-4584-635
问题是什么时候使用HTTP Redirect(HTTP Rewrite等方式也可以), 上面的值是怎么传给glassfish的~
参考你的回答,我做了以下事情~
- 修改iis上面的程序为:
<% @ Page Language="C#" %>
<%
Response.Write("<h3>Server Variables</h3>");
Response.Write("Name = " + Request["name"] + "<br>");
Response.Write("Email = " + Request["mail"] + "<br>");
Response.Write("Tel = " + Request["tel"] + "<br>");
Session["HTTP_MAIL"] = Request["HTTP_MAIL"]; ※set value to Session
Response.Write("Mail2 = " + Session["HTTP_TEST"] + "<br>");
%>
- 为此创建 Glassfish 的应用程序:
@RequestMapping(value = "/info2", method = RequestMethod.GET)
public Object getUserInfo2(HttpSession session, Model model) {
Enumeration<String> headerNames = session.getAttributeNames();
StringBuffer stringBuffer = new StringBuffer();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = (String) session.getAttribute(key);
stringBuffer.append(key + ":" + value + "\n");
}
model.addAttribute("StringBuffer", stringBuffer);
return "index";
}
session.
中没有任何内容似乎是使用IIS的HTTP重定向功能在应用执行前在IIS上重定向了应用。 换句话说,session 赋值似乎没有被执行
我做对了吗?
问题 #1:
IIS如何使用saml2.0访问adfs?
在我看来,IIS需要部署一个web应用来访问adfs,通过saml 2.0发送请求。
回答:
是的。你是对的。
(1) IIS需要部署一个SAML SP(服务提供商)来向ADFS发送SAML认证请求。
(2) 您需要将 ADFS 配置为 SAML IdP(身份提供者)。
Add ADFS as a SAML identity provider微软官方网站提供了如何将ADFS配置为SAML IdP的说明。
问题 #2:
是否必须使用 isapi 或 Shibboleth?
回答:
您可以在 IIS 上部署 Shibboleth SP(服务提供商)。
Shibboleth SP with IIS的官方link提供了如何在IIS上部署Shibboleth SP的说明。
Follow-up 问题 #1:
最终效果如下:adfs的终点:
iis.*.com/Shibboleth.sso/SAML2/POST
iis.*.com/Shibboleth.sso/SAML2/Artifact
但是adfs返回的是一个post,我没有通过iis端的程序header获取请求中的信息
参考这个网站Shibboleth SP for IIS でSAML対応
如何通过get获取adfs返回的数据
回答:
(1) Shibboleth SP AssertionConsumerService 不为 "GET".
提供 "HTTP-Redirect" endpoint/URL(I) 你不能 "get the data returned by adfs through get"。
(二)你得通过POST获取adfs返回的数据。
(2)假设您的网站是https://shibbolethiis.int.secioss.work
(I) Shibboleth SP AssertionConsumerService endpoint/URL 由您的 Shibboleth SP 元数据“https://shibbolethiis.int.secioss.work/Shibboleth.sso/Metadata”
展示<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://shibbolethiis.int.secioss.work/Shibboleth.sso/SAML2/POST" index="1"/>
(II) 引用您评论中的 link。即,Shibboleth SP for IIS でSAML対応
「默认网站」を选択し。IISを再启动します。
これでShibboleth-SPの设定は终了です。 以下のURLニ接続し、正稼働しテいるか确认しテください。
https://shibbolethiis.int.secioss.work/Shibboleth.sso/Status
正常の稼働しテいる场合、以下のようなXMLガ返ります。 最后の状态タグの内容ガOKナラ正常desu。
(III) 检查您的网站 Shibbolth SP session
https://shibbolethiis.int.secioss.work/Shibboleth.sso/Session
上面的Shibboleth SP Session URL应该显示ADFS发送的SAML响应携带的用户信息
如果您无法从上述 Shibboleth SP 中找到任何用户信息 Session URL
(III.a) 配置 ADFS 使用 SAML 发送用户信息 attribute/SAML assertion/SAML response
(III.b) 参照 GitHub 存储库中 Shibboleth SP shibboleth-sp-testapp/shibboleth-sp/attribute-map.xml 提供的示例,修改 Shibboleth SP "attribute-map.xml" 以接受 ADFS 发送的 SAML 属性。
通常 Shibboleth SP 使用 SAML 属性,例如 "mail" 属性(例如,ethan.smith@example.com)让用户登录您的网站。
(4) 备注:
(I) How to build and run Shibboleth SAML IdP and SP using Docker container 在 GitHub 存储库中提供了 Shibboleth SP 配置示例。
(II) 为了您的方便,我在上面的 GitHub 存储库中做了一个新的提交,将 ADFS 属性添加到 Shibboleth SP shibboleth-sp-testapp/shibboleth-sp/attribute-map.xml。请注意,我已使用相同的 ADFS 属性成功登录 Box 帐户。
(III)Configuring Attributes for SAML 2.0 and ADFS 3.0 提供了关于Shibboleth SP如何提取ADFS通过"attribute-map.xml"返回的用户info/data的有价值的信息和讨论。
Follow-up 问题 #2:
修改属性后。 XML,访问shibboleth.sso/Session,可以显示如下信息。
Attributes mail: 1 value(s)
tel: 1 value(s)
参考这个网站Shibboleth SP for IIS でSAML対応
5.動作確認
Display the following information
HTTP_MAIL:ya*@cn.*.com
HTTP_TEL:17*
当我通过 iis 的 HTTP 重定向功能将请求 header 重定向到 glassfish 时,如何从请求中获取信息?
回答:
另一个 Whosebug 问题 Getting a Request.Headers value 提供了如何使用 C# 从请求 header 中获取信息的解决方案,例如
if (Request.Headers["HTTP_MAIL"] != null) {
string user_email = Request.Headers["HTTP_MAIL"];
}
Follow-up 问题 #3:
不是问如何在IIS上获取headers,我的问题是如何在glassfish上获取登录信息~换句话说,获取后如何将request-header信息传递给glassfish它来自 iis?我也在glassfish get shibboleth sp attribute on iis里问了一个问题,比他现在的评论更详细
回答:
从网络安全的角度来看,您不能重定向用户信息来为 Glassfish 应用程序建立 HTTP 登录 session。否则,黑客可以使用相同的用户信息登录 Glassfish 应用程序,而无需任何身份验证,例如本地 username/password 身份验证或 third-party SAML 身份验证。
Follow-up 问题 #4:
当使用HTTP Redirect时(HTTP Rewrite等其他方式也可以),上面的值是如何传递给glassfish的?
session.
中没有任何内容似乎是使用IIS的HTTP重定向功能在应用程序执行前在IIS上重定向应用程序。换句话说,他 session 分配似乎没有执行
我做对了吗?
回答:
(1) Apache、GlassFish、IIS、Jetty 和 Tomcat 可以被视为用于托管 Web 应用程序的并行 Web 服务器。
Top Java Application Servers: Tomcat vs. Jetty vs. GlassFish vs. WildFly
Microsoft IIS vs Apache Tomcat: What are the differences?
Microsoft IIS and Apache Tomcat belong to "Web Servers" category of the tech stack.
Windows Server 2016 可以 运行 IIS 10 网络服务器和 GlassFish 5.1.0 网络服务器,而 IIS 10 网络服务器和 GlassFish 5.1.0 网络服务器可以 运行 它们的自己的网络应用程序。
(2) 从网络安全的角度来看,不同的 Web 应用程序应该在他们的后端服务器(例如 Apache、Glassfish、IIS、JETTY 和 Tomcat)上建立他们的 HTTP 登录 session。用户已通过 third-party SAML IdP(例如 Shibboleth SAML IdP)的身份验证。
因此,您不能将用户信息从 IIS 重定向到 Glassfish,因为 IIS 和 Glassfish 应该为其被授予 Web 应用程序访问权限的用户建立自己不同的 HTTP sessions。
分辨率:
您可以使用 OneLogin Java SAML SP tookit (Code Your Java App to Provide SSO via OneLogin) 为您的 Java-based GlassFish web 应用程序构建 SAML SP。
请注意,您的 Java-based GlassFish Web 应用程序的 OneLogin SAML SP 可以与任何 SAML IdP 通信,包括他们自己的 OneLogin SAML IdP,Shibboleth SAML IdP running on Docker container, or SAML IdP provided by our Zero-Password Authentication and Authorization System。