如何针对AzureAD在.net 4.5中实现SAML2身份验证?(使用令牌)

罗里

我想允许我的Web应用程序进行SAML身份验证,包括针对AzureAD作为身份提供程序以及ADFS。(任何人都可以向我指出一个好的教程或演练吗?)到目前为止,我已经生成了SAML请求,从AzureAD取回SAMLP响应,并验证了其签名(包括SHA256无法正常工作的事实)默认情况下)。

现在,我想从中提取信息以验证发行者,并获取用户的电子邮件以进行识别。通过XML手动执行此操作是否可以,还是应该使用Saml2SecurityTokenHandler之类的类它们看起来像他们应该做的那样,但是我发现很难从安全的角度理解所有必需的配置以及是否有必要使用此类。

我的应用程序是多租户,因此我需要代码而不是配置来处理Saml,因为不同的租户将使用不同的身份验证选项。

该博客说不使用ConfigurationBasedIssuerNameRegistry,而是指向[ValidatingIssuerNameRegistry][3]好的,这似乎适合我的情况。

此问题中,有一些代码以编程方式配置受信任的颁发者,因此我可以进行调整以使用ValidatingIssuerNameRegistry,然后大概可以使用tokenHandlersAssertion从SAMLP响应中读取,然后提取包括名称(电子邮件)的声明。但是,在哪里可以从AzureAD元数据传递指纹和名称呢?而使用这些类而不是自己解析响应到底有什么价值呢?确实感觉要为此使用一个库是正确的事情,但是WIF的复杂性以及缺乏有关此操作的演练文章使人们觉得除了身份领域的那些人以外,这似乎是不合适的。

我的猜测是,如果我已经有本地存储的证书来验证SAML响应的颁发者的身份,并且在XML中验证了签名,那么我可以很高兴地使用SAML响应的内容。即用户的身份。仍然感觉像是手动执行此操作的错误方法,但是如果没有明显的缺点,我可以接受。

一些相关的SO问题和文章:

亚伯是不同的

如您所知-即使支持SAML2令牌,.NET也没有内置支持SAML2协议。

建议您不要自己研究,而应该研究适用于ASP.NET的SAML2P的可用开源和商业库。除了.NET框架中提供的功能之外,还有很多工作来构建可靠的服务提供者。(我知道,因为我已经建立了一个,如果我知道我现在知道的东西,我认为我不会再做一次)。

如果您选择自己动手,则Saml2SecurityTokenHandler其中包含用于从XML读取断言,将其转换为声明标识并验证断言签名的重要工具。请注意,处理程序希望断言被签名-AFAIK没有内置支持来处理整个SAML响应已签名(也涵盖嵌入式断言)的情况。

使用Kentor.AuthServices

此处描述的方案直接使用Kentor.AuthServices API,这是一种高级方案,不建议将其作为首选方案。对于Web API和现代MVC应用程序,最好使用Kentor.AuthServices.Owin包中的Owin中间件。

此处的代码使用的是Kentor.AuthServices.HttpModule包中的API。

设定档

要直接使用AuthServices API,您首先必须创建一个配置,如docs中所述既可以在代码中也可以在web.config中进行。对于此示例,我将仅引用Options作为IOptions实例属性可以通过Options.FromConfiguration属性从web.config加载它

发送AuthnRequest

身份验证的第一步是发送AuthnRequest。dummyUrl仅仅是任何非空Uri对象。在这种情况下将不会使用它,但是不允许将其为null。

var idp = Options.IdentityProviders.Default;
var urls = new AuthServicesUrls(fullUrlOfYourAcsService, dummyUrl, applicationUrl);

var authnRequest = idp.CreateAuthenticateRequest(dummyUrl, urls);

// Apply will call Response.End
idp.Bind(authnRequest).Apply(new HttpResponseWrapper(HttpContext.Current.Response));

即使OP已经设法做到这一点,也必须通过AuthServices来完成,以正确注册挂起的请求,然后将其与返回的响应匹配。

收到回应

下一步是接收返回的SAML2Response。发送AuthnRequest时,此代码应位于“ fullUrlOfYourAcsService”位置。

var result = CommandFactory.GetCommand(CommandFactory.AcsCommandName)
  .Run(new HttpRequestWrapper(HttpContext.Current.Response), Options);

// result.Principal will now contain the received identity.

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

NET Core中如何使用自定义策略架构实现jwt令牌库身份验证以进行授权?

来自分类Dev

如何在ASP.NET MVC 4中使用SimpleMembershipProvider拒绝所有通过身份验证的用户访问

来自分类Dev

在Postman中针对AzureAD授权时如何获取v2 jwt令牌

来自分类Dev

在ASP.NET Core中针对Mongodb数据存储区的基于简单令牌的身份验证/授权

来自分类Dev

如何在asp.net中检查基于令牌的GET和Post方法的身份验证

来自分类Dev

在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

来自分类Dev

在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

来自分类Dev

当使用ASP.NET Core Web API中没有身份的cookie身份验证时,如何在登录时刷新CSRF令牌

来自分类Dev

在Asp.net core / 5中使用策略库进行令牌身份验证

来自分类Dev

如何通过表单在ASP.NET Web API中实现Active Directory身份验证?

来自分类Dev

如何通过表单在ASP.NET Web API中实现Active Directory身份验证?

来自分类Dev

如何将基于声明的身份验证应用于.NET 4应用程序?

来自分类Dev

如何在ASP Net Core 3.1控制器中针对特定操作设置基本身份验证?

来自分类Dev

.net核心Web API Jwtbearer中间件如何使用身份验证提供程序验证OpenID Connect令牌

来自分类Dev

如何针对Firebase验证身份验证令牌?

来自分类Dev

ASP.NET MVC 4中具有ASPNET身份的基于角色的身份验证

来自分类常见问题

.NET Core身份服务器4身份验证VS身份身份验证

来自分类Dev

我们如何在ASP.NET Web API中记录身份验证令牌请求

来自分类Dev

Windows身份验证和ASP.NET MVC 4中的表单身份验证的混合

来自分类Dev

如何实现自己的DBContext并在ASP.Net Core中仍将给定的ApplicationUser与身份验证一起使用?

来自分类Dev

使用运行Identity Server 4的ASP.NET CORE 3身份验证服务器对ASP.NET MVC 5应用(目标.net 4.5)进行身份验证

来自分类Dev

在没有浏览器的情况下针对WSO2 Identity Server进行身份验证,并获取SAML2断言消息

来自分类Dev

ASP.NET MVC 4用户身份验证

来自分类Dev

如何对 ASP.NET 样板使用外部身份验证?

来自分类Dev

ASP.NET Web API 2:如何使用外部身份验证服务登录?

来自分类Dev

使用ASP.NET Identity 2进行身份验证时,如何获得返回的User对象?

来自分类Dev

如何在代码中而不是使用AuthorizeAttribute检查ASP.NET身份验证策略?

来自分类Dev

如何使用 Identity & Entity Framework 在 .NET Core 2.0 中管理身份验证和授权

来自分类Dev

如何使用身份验证在Laravel-4中更改密码

Related 相关文章

  1. 1

    NET Core中如何使用自定义策略架构实现jwt令牌库身份验证以进行授权?

  2. 2

    如何在ASP.NET MVC 4中使用SimpleMembershipProvider拒绝所有通过身份验证的用户访问

  3. 3

    在Postman中针对AzureAD授权时如何获取v2 jwt令牌

  4. 4

    在ASP.NET Core中针对Mongodb数据存储区的基于简单令牌的身份验证/授权

  5. 5

    如何在asp.net中检查基于令牌的GET和Post方法的身份验证

  6. 6

    在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

  7. 7

    在ASP.NET MVC 4应用程序中的身份验证中使用会话变量

  8. 8

    当使用ASP.NET Core Web API中没有身份的cookie身份验证时,如何在登录时刷新CSRF令牌

  9. 9

    在Asp.net core / 5中使用策略库进行令牌身份验证

  10. 10

    如何通过表单在ASP.NET Web API中实现Active Directory身份验证?

  11. 11

    如何通过表单在ASP.NET Web API中实现Active Directory身份验证?

  12. 12

    如何将基于声明的身份验证应用于.NET 4应用程序?

  13. 13

    如何在ASP Net Core 3.1控制器中针对特定操作设置基本身份验证?

  14. 14

    .net核心Web API Jwtbearer中间件如何使用身份验证提供程序验证OpenID Connect令牌

  15. 15

    如何针对Firebase验证身份验证令牌?

  16. 16

    ASP.NET MVC 4中具有ASPNET身份的基于角色的身份验证

  17. 17

    .NET Core身份服务器4身份验证VS身份身份验证

  18. 18

    我们如何在ASP.NET Web API中记录身份验证令牌请求

  19. 19

    Windows身份验证和ASP.NET MVC 4中的表单身份验证的混合

  20. 20

    如何实现自己的DBContext并在ASP.Net Core中仍将给定的ApplicationUser与身份验证一起使用?

  21. 21

    使用运行Identity Server 4的ASP.NET CORE 3身份验证服务器对ASP.NET MVC 5应用(目标.net 4.5)进行身份验证

  22. 22

    在没有浏览器的情况下针对WSO2 Identity Server进行身份验证,并获取SAML2断言消息

  23. 23

    ASP.NET MVC 4用户身份验证

  24. 24

    如何对 ASP.NET 样板使用外部身份验证?

  25. 25

    ASP.NET Web API 2:如何使用外部身份验证服务登录?

  26. 26

    使用ASP.NET Identity 2进行身份验证时,如何获得返回的User对象?

  27. 27

    如何在代码中而不是使用AuthorizeAttribute检查ASP.NET身份验证策略?

  28. 28

    如何使用 Identity & Entity Framework 在 .NET Core 2.0 中管理身份验证和授权

  29. 29

    如何使用身份验证在Laravel-4中更改密码

热门标签

归档