我试图找到一个文档或示例,说明如何使用ASP.NET标识在MVC 5中向用户标识添加自定义声明.该示例应显示在OWIN安全管道中插入声明的位置以及如何使用表单身份验证将它们保存在cookie中.
我正在尝试使用客户端证书来使用Web API对设备进行身份验证和授权,并开发了一个简单的概念证明来解决潜在解决方案的问题.我遇到的问题是Web应用程序没有收到客户端证书.一些人报告了这个问题,包括在本问答中,但没有一个人有答案.我希望提供更多细节来重振这个问题,并希望得到我的问题的答案.我对其他解决方案持开放态度.主要要求是用C#编写的独立进程可以调用Web API并使用客户端证书进行身份验证.
此POC中的Web API非常简单,只返回单个值.它使用一个属性来验证是否使用了HTTPS以及是否存在客户端证书.
public class SecureController : ApiController
{
[RequireHttps]
public string Get(int id)
{
return "value";
}
}
Run Code Online (Sandbox Code Playgroud)
以下是RequireHttpsAttribute的代码:
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
var cert = actionContext.Request.GetClientCertificate();
if (cert == null)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "Client Certificate Required"
};
}
base.OnAuthorization(actionContext);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在这个POC中,我只是检查客户端证书的可用性.一旦这个工作,我可以添加证书中的信息检查,以验证证书列表. …
c# security client-certificates ssl-certificate asp.net-web-api
我继承自System.Web.Http.AuthorizeAttribute以创建自定义授权/身份验证例程,以满足使用ASP.NET MVC 4开发的Web应用程序的一些不寻常的要求.这增加了用于来自Web的Ajax调用的Web API的安全性客户.要求是:
Web客户端是单页面应用程序(SPA),因此典型的表单身份验证不能很好地工作,但我尝试尽可能多地重用ASP.NET安全框架以满足要求.定制的AuthorizeAttribute非常适合于确定与Web服务方法关联的角色的要求2.我接受三个参数,应用程序名称,资源名称和操作来确定哪些角色与方法相关联.
public class DoThisController : ApiController
{
[Authorize(Application = "MyApp", Resource = "DoThis", Operation = "read")]
public string GetData()
{
return "We did this.";
}
}
Run Code Online (Sandbox Code Playgroud)
我重写OnAuthorization方法以获取角色并验证用户身份.由于必须针对每个事务对用户进行认证,因此通过在同一步骤中执行认证和授权来减少来回聊天.我通过使用基本身份验证从Web客户端获取用户凭据,该身份验证传递HTTP标头中的加密凭据.所以我的OnAuthorization方法如下所示:
public override void OnAuthorization(HttpActionContext actionContext)
{
string username;
string password;
if (GetUserNameAndPassword(actionContext, out username, out password))
{
if (Membership.ValidateUser(username, password))
{
FormsAuthentication.SetAuthCookie(username, false);
base.Roles = GetResourceOperationRoles();
}
else
{
FormsAuthentication.SignOut();
base.Roles = "";
}
}
else
{ …Run Code Online (Sandbox Code Playgroud) 我按照这些说明在我们的Intranet上托管了一个NuGet Server(版本2.2.2).它在列出包并在VS 2012中检索它时效果很好.但是当我使用Nuget Package Explorer创建一个包并尝试发布它时,系统会提示我提示输入凭据的Windows安全性对话框.无论我输入什么凭据,它都会重新提示我输入用户名和密码,并返回401身份验证错误.为什么NuGet服务器会提示我输入Windows凭据?如何摆脱它?它只用于发布而不是其他任何内容.
我有在 .NET Core 2.1 中开发的应用程序 A 和在 .NET Framework 4.7.1 中开发的应用程序 B。他们有一个使用 .NET Standard 2.0 开发的共享库/程序集。这很好用,我可以编译这个库的单个实例并在应用程序 A 和应用程序 B 之间共享它。但这需要每个应用程序 bin 文件夹中的程序集的两个副本。如果应用程序 A 和应用程序 B 部署在同一台机器上,我想在单个位置更新共享程序集的单个实例,并同时更新应用程序 A 和应用程序 B。如果应用程序 A 和应用程序 B 使用 .NET Core 而另一个使用 .NET Framework,应用程序 A 和应用程序 B 是否可以在同一位置查找此程序集?
我正在尝试从ECDiffieHellmanCng对象的新实例导出密钥,以便稍后可以使用相同的密钥创建它的实例.但是我在尝试导出它时遇到错误.
//Create new ECDiffieHellmanCng which automatically creates new keys
var ecdh = new ECDiffieHellmanCng();
//Export the keys
var privateKey = ecdh.Key.Export(CngKeyBlobFormat.EccPrivateBlob);
Run Code Online (Sandbox Code Playgroud)
当我使用消息" 不支持请求的操作 " 调用Export方法时,我收到CryptographicException .在代码中放入一些断点之后,它甚至在执行方法之前抛出了异常.查看Export方法的定义,它使用SecuritySafeCriticalAttribute进行装饰,因此我怀疑此属性实际上是在抛出异常.导致此异常的原因是什么?如何保存密钥以便以后可以创建相同ECDiffieHellmanCng对象的实例?
我在服务器上安装了TFS 2012,我想验证是否已安装Update 1.我正在尝试安装TFS Power Tools for Update 1,但遇到了在管理控制台中运行备份向导的问题.我怀疑这个问题是因为我没有在TFS上安装Update 1,但是在我经历漫长的过程之前要确定.
我手头有一个新项目非常复杂,因为我不知道它的领域.我的要求是这个,我们有电话号码列表,我需要查看哪个电话号码是有效/真实的.
您如何编程电话或IVR系统以自动拨打此列表上的电话号码并自动检测它是否是有效的电话号码?我想用C#编写这个解决方案.