标签: wif

已安装ACS,但MVC 4.0应用仍然重定向,无法找到login.aspx

首先发布stackoverflow,但我喜欢这个网站!...

我已经使用MVC 4成功创建了一个功能齐全的Azure混合模型应用程序.发布并且效果很好.现在我想将auth的ACS添加到我的站点.我已经按照所有步骤进行了操作,但是当我在模拟中运行应用程序时,它无法重定向到ACS并提供页面声明它无法找到login.aspx.

我创建了一个简单的网站解决方案,只是为了证明我的ACS设置正确并且工作得很好.我注意到这两个解决方案的web.config文件差别很大.

有人试过这样做吗?任何帮助,将不胜感激.

---------解决方案-----------

我终于把一切都搞定了. 关键是要删除WebMatrix.WebData引用,因为我不需要自己执行身份验证.以下内容来自MVC4发行说明.

当WebMatrix.WebData.dll包含在ASP.NET MVC 4应用程序的/ bin目录中时,它将接管表单身份验证的URL.将WebMatrix.WebData.dll程序集添加到应用程序(例如,在使用"添加可部署依赖项"对话框时选择"带有Razor语法的ASP.NET网页")将覆盖身份验证登录重定向到/ account/logon而不是/ account默认ASP.NET MVC帐户控制器所期望的/ login.

asp.net-mvc azure wif acs

24
推荐指数
1
解决办法
3782
查看次数

WIF 4.5 BootstrapContext安全令牌null

我正在使用新的4.5 WIF内容来验证网站用户并确保我的MVC网站和WCF服务之间的通信.

我将网站配置为保存引导上下文,以便我可以为服务层的所有请求重用相同的安全令牌.

在正常情况下,一切正常,每个网站请求都经过身份验证,并且SecurityToken通过上下文可用来保护WCF调用.

但是,如果网站应用程序域被重置(例如,在开发时构建应用程序),对网站的任何请求仍将被认证,但在上下文中不再提供SecurityToken以传递给WCF调用.

调试BootstrapContext它有4个有用的属性:

SecurityToken
SecutiryTokenHandler
Token
TokenBytes
Run Code Online (Sandbox Code Playgroud)

预应用程序域重置SecurityToken和SecurityTokenHandler具有值,并且重置后Token具有值.

在重置之后注意Token的值,它看起来像是原始的SAML XML,所以我可以从它中重新整合一个完整的SecutiryToken,但这似乎是奇怪的行为,我找不到任何文档.

任何想法,我可以做什么来确保SecurityToken始终可以保存我乱码令牌XML?

更新

使用dotPeek来查看框架源代码中发生了什么,我可以看到导致这种行为的执行路径,但我无法确定为什么需要这样做以及如何进行avioded的任何原因.

最后我放弃了尝试解决它现在使用以下代码来确保我有一个令牌

if (context.SecurityToken != null)
{
    token = context.SecurityToken;
}
else if (context.Token.IsNotEmpty())
{
    var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
    token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token)));
}
Run Code Online (Sandbox Code Playgroud)

我现在担心的是我错过了这个behaiour背后的一些推理,我上面的解决方案会在某些时候爆发.

.net security wcf saml wif

24
推荐指数
1
解决办法
4294
查看次数

如何从ClaimsPrinciple中删除现有声明?

我正在制作一个开发人员工具来模仿RolesIntranet站点,以便开发人员能够Role根据需要快速执行任何操作.定义的角色Developer, Team Lead, Team Member, Engineering, Marketing, Guest,并在网页上的工具向Web API的调用来添加或删除的Claim...好,我可以添加,但似乎无法找出的.RemoveClaim(claim).TryRemoveClaim(claim)可以访问得到这个工作.我是否必须创建自定义声明管理器才能获得此功能,或者我是否遗漏了某些内容?

我一直在关注System.Security.Claims,几乎所有其他东西似乎都非常简单,并且没有任何参考需要大量工作来完成我需要的工作.

我在.NET 4.5.1中使用VS 2013/Web Api2.

网站方面只是使用简单的ajax调用PUTDELETE功能,直到我按照我想要的方式工作.从Controller,我的cs代码如下:

    public void Put(int id, [FromBody]string role)
    {
        if (FindClaim(role) != null) return;

        var user = HttpContext.Current.User as ClaimsPrincipal;
        if (user == null) return;

        var claimId = new ClaimsIdentity();
        claimId.AddClaim(new Claim(ClaimTypes.Role, role));
        user.AddIdentity(claimId);
    }

    // DELETE api/devroleadjuster/5
    public void Delete(int id, [FromBody]string role)
    {
        var claim = FindClaim(role); …
Run Code Online (Sandbox Code Playgroud)

c# claims-based-identity wif asp.net-web-api

24
推荐指数
2
解决办法
2万
查看次数

ClaimsPrincipal的作用是什么,为什么它有多个身份?

我试图基于应用程序(依赖方)的声明来理解.NET背后的安全模型.

我知道有两大类:

  • ClaimsPrincipal - 正在运行的进程的安全上下文
  • IdentityPrincipal - 存储有关用户的信息 - 身份验证状态和声明

ClaimsPrincipal只包含一组身份和指向当前使用的身份,但据我所知,主体通常永远不会包含多于1个身份,即使它会 - 但用户从未登录过2个或更多身份.

对我来说,ClaimsPrincipal,除了使用它来获得当前的身份,原谅我的无知,它是无用的.

除了我所陈述的内容之外我还缺少什么,让我们说一下与ClaimsPrincipal类相关的向后兼容性?

.net c# authentication claims-based-identity wif

24
推荐指数
3
解决办法
8851
查看次数

ASP.NET MVC 2和使用WIF进行身份验证(Windows Identity Foundation)

是否有以下可用的例子:

浏览WIF SDK,有一些使用WIF与ASP.NET结合使用的示例,使用它WSFederationAuthenticationModule (FAM)来重定向到用户用来进行身份验证的安全令牌服务(STS)之上的ASP.NET站点瘦皮肤(通过提供用户名)和密码).

如果我正确理解WIF和基于声明的访问,我希望我的应用程序提供自己的登录屏幕,用户可以在其中提供用户名和密码,并将此委托给STS进行身份验证,通过安全标准将登录详细信息发送到端点(WS-*),并期望返回SAML令牌.理想情况下,按照结合SessionAuthenticationModule使用的示例工作FAM, SessionAuthenticationModule即负责重建IClaimsPrincipal会话安全分块cookie并在安全会话到期时重定向到我的应用程序登录页面.

我所描述的可能是使用FAMSessionAuthenticationModule使用适当的web.config设置,还是我需要考虑写一个HttpModule自己来处理这个?或者,是否重定向到瘦网站STS,用户在被动请求方案中登录事实上的方法?

authentication asp.net-mvc claims-based-identity wif

23
推荐指数
2
解决办法
2万
查看次数

"我的"证书商店去了哪里?

因为我很棒我想在我的7盒子上使用VS2k10 B2运行最新的WIF演示应用程序... 64位当然(我的脖子很强)我遇到了运行问题.

整个演示事项的一部分要求我在本地计算机上安装一些证书.问题是他们要求我将一些网站证书安装到名为LocalMachine/My的证书商店中.好吧,似乎没有任何/我了.有一个名为Personal的可疑类似商店,但如果我在那里安装证书并更改配置以查看LocalMachine/Personal,则该应用程序无效.

如果我在TrustedPeople中安装证书(由于我尝试使用Personal时抛出的异常,它被提及为有效位置),这是否足够?在生产机器上这样做会被认为是坏形式吗?


可以在以下位置找到Windows Identity Foundation测试项目:http: //claimsbasedwpf.codeplex.com

例外:

属性名称:'certificateReference'错误:'ID1025:找不到符合条件的唯一证书.StoreName:'My'StoreLocation:'LocalMachine'X509FindType:'FindBySubjectDistinguishedName'FindValue:'CN = busta-rpsts.com''

certificate certificate-store visual-studio wif

22
推荐指数
2
解决办法
3万
查看次数

找不到符合条件的唯一证书

尝试解析我的令牌时遇到以下错误:

Property name: 'certificateReference'
Error: 'ID1025: Cannot find a unique certificate that matches the criteria.
StoreName: 'My'
StoreLocation: 'LocalMachine'
X509FindType: 'FindByThumbprint'
FindValue: '?41a8a59e537d4a00a8c4fa8dc2522388dbd13d27'
Run Code Online (Sandbox Code Playgroud)

我的web.config中的部分是:

<serviceCertificate>`
    <certificateReference x509FindType="FindByThumbprint" findValue="?41A8A59E537D4A00A8C4FA8DC2522388DBD13D27" storeLocation="LocalMachine" storeName="My" />
</serviceCertificate>
Run Code Online (Sandbox Code Playgroud)

我已经确认了IIS,MMC和Internet Explorer中存在的证书,并尝试将查找类型更改为主题但无济于事.我还尝试将指纹设为大写,小写,有空格且没有空格.我还确认证书存在LocalMachine\My,结果如下:

Matching certificate:
CN=kelly-pc
Run Code Online (Sandbox Code Playgroud)

可以访问私钥的其他帐户和组包括:

NT AUTHORITY\SYSTEM
BUILTIN\Administrators
KELLY-PC\Kelly
BUILTIN\IIS_IUSRS
Run Code Online (Sandbox Code Playgroud)

x509certificate wif

22
推荐指数
3
解决办法
2万
查看次数

为什么我收到"从客户端检测到有潜在危险的Request.Form值"错误?

我使用"Internet应用程序"模板创建了一个新的ASP.NET MVC 3/.NET Framework 4.0站点.我使用Nuget安装Windows Azure Web角色(MVC3)包,然后按照访问控制服务演练设置Windows Live ID和Google身份验证.

很快,我遇到了"从客户端检测到一个潜在危险的Request.Form值"错误,并按照Windows Identity Foundation wiki中文章尝试解决它.不幸的是,我尝试过的一切都没有,包括:

  • 设置<httpRuntime requestValidationMode="2.0"/><pages validateRequest="false">在根web.config和Views\web.config中

  • SampleRequestValidator从WIF SDK 复制到项目并<httpRuntime requestValidationType="SampleRequestValidator"/>在web.configs中进行设置

我也试过这些变种而没有成功.

有任何想法吗?

这是完整的例外:


异常详细信息: System.Web.HttpRequestValidationException:从客户端检测到潜在危险的Request.Form值(wresult =" <t:RequestSecurityTo...").

说明:请求验证已检测到潜在危险的客户端输入值,并且请求的处理已中止.此值可能表示尝试破坏应用程序的安全性,例如跨站点脚本攻击.要允许页面覆盖应用程序请求验证设置,请将httpRuntime配置部分中的requestValidationMode属性设置为requestValidationMode ="2.0".示例:<httpRuntime requestValidationMode="2.0" />.设置此值后,您可以通过在Page指令或<pages>配置部分中设置validateRequest ="false"来禁用请求验证.但是,强烈建议您的应用程序在这种情况下明确检查所有输入.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=153133.

堆栈跟踪:

[HttpRequestValidationException(0x80004005):从客户端检测到一个潜在危险的Request.Form值(wresult =" <t:RequestSecurityTo...").

System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8755668
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122
System.Web.HttpRequest.get_Form() +114
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.IsSignInResponse(HttpRequest request) +75
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean …

azure wif acs asp.net-mvc-3

21
推荐指数
4
解决办法
5万
查看次数

如何加密JWT安全令牌?

我需要通过签名和加密来保护我的网络令牌.我编写了下一行代码:

var tokenHandler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
      Subject = new ClaimsIdentity(new[]
         {
             new Claim(ClaimTypes.Name, owner.Name),
             new Claim(ClaimTypes.Role, owner.RoleClaimType),
             new Claim("custom claim type", "custom content")
         }),
      TokenIssuerName = "self",
      AppliesToAddress = "http://www.example.com",
      Lifetime = new Lifetime(now, now.AddSeconds(60 * 3)),
      EncryptingCredentials = new X509EncryptingCredentials(new X509Certificate2(cert)),
      SigningCredentials = new X509SigningCredentials(cert1)
};
var token = (JwtSecurityToken)tokenHandler.CreateToken(tokenDescriptor);            
var tokenString = tokenHandler.WriteToken(token);
Run Code Online (Sandbox Code Playgroud)

所以,我正在使用一些生成的证书makecert.exe.然后我用另一个读取令牌字符串JwtSecurityTokenHandler:

var tokenHandlerDecr = new JwtSecurityTokenHandler();
var tok = tokenHandlerDecr.ReadToken(tokenString);
Run Code Online (Sandbox Code Playgroud)

并且令牌内容未加密(我可以tok在调试器下看到变量中的json ).我究竟做错了什么?如何加密令牌数据?

c# security wif jwt

21
推荐指数
3
解决办法
2万
查看次数

在Claim中存储字符串列表(System.Security.Claims)

我正在使用Asp.Net 5 MVC,Owin和Oauth2 bearer token作为auth类型开发一个Web应用程序.

我需要"CODEFOO,CODBAR,CODEX,.."System.Security.Claims.Claim中存储一个带有自定义声明类型的字符串列表.

当用户请求令牌时,此"用户代码"列表将从后端获取,并使用特定的自定义声明类型在身份内设置.
当用户发回令牌,导航特定的MVC动作时,应用程序必须检查声明内的用户代码列表是否包含特定代码.

List<string> userCodes = rep.GetUserCodeFromBackEnd();
string userCodesClaimType = "http://foo.it/claim/usercodesclaimtype";
Run Code Online (Sandbox Code Playgroud)

现在我正在使用JSON序列化字符串列表.

var claim = new Claim(userCodesCaimType, JsonConvert.SerializeObject(userCodes));
Run Code Online (Sandbox Code Playgroud)

并使用以下内容将其反序列化:

var userCodesClaim = identity.Claims.FirstOrDefault<Claim>(c=>c.Type == userCodesClaimType) ;
var userCodesClaimValue = JsonConvert.DeserializeObject<List<string>>(userCodesClaim.Value);
Run Code Online (Sandbox Code Playgroud)

现在的问题是:有没有更好的方法来存储索赔中的值列表?
Claim有一个ValueType属性,文档说:

ValueType属性包含一个标识值的类型信息的字符串.此属性可用于了解值的格式,并提供有关如何序列化和反序列化值的信息.如果您的解决方案需要复杂的值类型,建议您在ValueType属性中使用标准XML模式类型来指示Value属性如何从字符串序列化和反序列化.

不幸的是,我没有找到任何记录该属性使用的示例.
Json序列化是正确的还是我应该使用ValueType方法?

c# claims-based-identity wif owin asp.net-mvc-5

21
推荐指数
2
解决办法
1万
查看次数