Tag: owin

无法使用.netvalidationJSON Web令牌 – 密钥短

我使用JSONWebToken npm模块生成一个jot: var jwt = require(‘jsonwebtoken’); var payload = { “iss”: “https://secure.example.com/”, “exp”: 1410819380, “http://example.com/orgnum”: “987987987”, “http://example.com/user”: “me@example.com” }; var token = jwt.sign(payload, ‘secret’); console.log(token); 这给了我以下输出: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlY3VyZS5leGFtcGxlLmNvbS8iLCJleHAiOjE0MTA4MTkzODAsImh0dHA6Ly9leGFtcGxlLmNvbS9vcmdudW0iOiI5ODc5ODc5ODciLCJodHRwOi8vZXhhbXBsZS5jb20vdXNlciI6Im1lQGV4YW1wbGUuY29tIiwiaWF0IjoxNDA4Mzk0Mjk2fQ.5X5LTg4wxDF2p49xtsRcG4S9Yk4qSfW1tMEU0AquBhc 由于我没有指定我想要的算法,因此它使用SHA256。 现在,我尝试在c#中validation这一点。 这简直不容易…… 我得到一个关于密钥大小的例外: IDX10603:’System.IdentityModel.Tokens.InMemorySymmetricSecurityKey’不能小于:’128’位。 Parameternavn:key.KeySize实际大小为48。 我尝试扩展密钥,在创建对称密钥时出现新错误: Base-64 char数组或字符串的长度无效 我认为这与我告诉.net代码关于我的密钥的方式有关。 由于SymmetricKeyIssuerSecurityTokenProvider构造函数参数名为base64Key ,因此我尝试对我的密钥进行Base64Url编码: var secret = Base64UrlEncoder.Encode(“secret”); TokenValidationParameters validationParameters = new TokenValidationParameters { ValidateIssuer = false, ValidateAudience = false, […]

如何在Oauth2中同时撤销RefreshToken并使AccessToken无效

我正在使用Owin Oauth2(授权和资源服务器是相同的)开发单页面应用程序(AngularJS + .Net MVC Json Rest API)的身份validation流程。 我在传统的cookie +会话中选择了Bearer Token路由,因为我希望保持无状态,并且因为移动应用程序将使用相同的Api,其中令牌的问题少于cookie。 这是简化的流程: 用户将用户名/密码提交给服务器(通过Https POST到TokenProvider路由) Owin创建一个AccessToken ,其AccessToken包含生成的GUID(代表会话ID)和其他一些声明。 Owin创建了一个RefreshToken 。 Server在RefreshToken表中创建一个条目,其中包含以下字段: GUID(PK)| RefreshToken |订票| DateIssued | DateExpire | DateEnd Server为客户端提供AccessToken和RefreshToken 。 客户端将AccessToken和RefreshToken存储到SessionStorage中。 客户端使用AccessToken访问Api。 当AngularJS检测到AccessToken即将到期时,它会缓冲所有请求并发出grant_type refresh_token request ; server使用客户端提供的RefreshToken ,并且: 从Db检查刷新令牌是否仍然有效( DateExpire > GetTime() And DateEnd is Null ) 从Db拿到机票 从Ticket创建AccessToken 使用新Dates,新RefreshToken和新Ticket更新db条目(注意:GUID保持不变) 当客户端访问注销服务器端时,从已记录用户的身份声明中读取的GUID用于使表上的条目无效( DateEnd = GetTime() )。 客户端两个令牌都从SessionStorage中删除。 […]

如何在使用IdentityServer进行身份validation后获取WebAPI控制器上的用户信息?

在我的客户端应用程序成功validationIdentityServer3后,我无法在WebAPI控制器上获取用户信息。 以下是步骤: 从JavaScript Implicit Client应用程序成功登录“使用配置文件和访问令牌” 我在“ID令牌内容”面板上看到用户的数据 我对我的WebAPI服务进行“呼叫服务”,我在ClaimsPrincipal中看到了许多声明,但无法获取客户端显示的电子邮件,角色等值。 以下是代码和回复。 任何人都可以帮我提供一些如何在WebAPI上获取用户数据的帮助吗?

使用AD FS和OWIN的SSO如何创建帐户和处理权限

我配置了一个使用AD FS的Web App,为此我使用了OWIN。 对于登录,一切都好。 如果我是域名的用户并访问该网站,则会自动连接。 但我想要的是在登录后自己处理用户和角色。 所以我想用这个AD帐户检查我的数据库中是否存在用户(此过程将在另一个应用程序登录之前生成) 我想使用Microsoft的Identity来处理声明(角色和权限)。 但我不明白如何将我的代码用于处理来自AD FS(使用Ws-Federation)的成功连接,并添加validation并填写正确的角色。 我在ConfigureAuth中的代码: public partial class Startup { private static string realm = ConfigurationManager.AppSettings[“ida:Wtrealm”]; private static string adfsMetadata = ConfigurationManager.AppSettings[“ida:ADFSMetadata”]; private NLogLoggingService _loggingService; public void ConfigureAuth(IAppBuilder app) { _loggingService = new NLogLoggingService(“Startup”); _loggingService.Debug(“ConfigureAuth”); app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType); app.UseCookieAuthentication(new CookieAuthenticationOptions()); app.UseWsFederationAuthentication( new WsFederationAuthenticationOptions { Wtrealm = realm, MetadataAddress = adfsMetadata, //CallbackPath […]

将证书注册到SSL端口

我有一个Windows服务(作为LocalSystem运行),它自我托管OWIN服务(SignalR),需要通过SSL访问。 我可以在我的本地开发机器上设置SSL绑定 – 我可以在同一台机器上通过SSL访问我的服务。 但是,当我去另一台机器并尝试运行以下命令时,我收到一个错误: 命令: netsh http add sslcert ipport=0.0.0.0:9389 appid={…guid here…} certhash=…cert hash here… 错误: SSL证书添加失败,错误:1312 指定的登录会话不存在。 它可能已被终止。 我使用的证书是完全签名的证书(不是开发证书),可以在我的本地开发框中使用。 这就是我在做的事情: Windows服务启动并使用以下代码注册我的证书: var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadWrite); var path = AppDomain.CurrentDomain.BaseDirectory; var cert = new X509Certificate2(path + @”\mycert.cer”); var existingCert = store.Certificates.Find(X509FindType.FindByThumbprint, cert.Thumbprint, false); if (existingCert.Count == 0) store.Add(cert); store.Close(); 然后我尝试使用netsh和以下代码将证书绑定到端口9389: var […]

FormsAuthentication对象已废弃

我在MVC5站点中使用以下代码: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Login(LoginModel loginModel) { if (ModelState.IsValid) { var authenticated = FormsAuthentication.Authenticate(loginModel.UserName, loginModel.Password); if (authenticated) { FormsAuthentication.SetAuthCookie(loginModel.UserName, true); return RedirectToAction(“AdminPanel”); } ModelState.AddModelError(“”, “The username and password combination were incorrect”); } return View(loginModel); } 这引发了以下警告: System.Web.Security.FormsAuthentication.Authenticate(string,string)’已过时:’建议的替代方法是使用Membership API,例如Membership.ValidateUser。 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=252463 。 首先是免责声明 – 我是那些喜欢与事物保持同步的开发人员之一,我更愿意完全避免VS中的警告。 但是,在这个特定的实例中,我使用的是非常原始的身份validation,它直接来自web.config,如下所示: 在这个项目中绝对没有进一步的登录要求 – 使用数据库是过度的,并且不需要分布式登录; 基本上,将详细信息存储在web.config中是最理想的解决方案,每个应用程序可能只有一个用户。 我无疑会从控制器(使用DI / IoC)中抽象出认证代码,但我仍然打算使用FormsAuthentication对象对web.config中的详细信息进行身份validation。 虽然我完全了​​解会员提供商,DotNetOpenAuth和新的(但非常可怕的)基于OWIN的身份validation模型,但上述代码绰绰有余。 第一个问题 – […]

在Owin启动期间,Simple Injector无法为每个Web API请求注册类注入

我正在使用Owin,Web API,entity framework,ASP.NET身份创建API。 我使用Simple Injector作为我选择的DI框架。 在Owin启动过程中,我想用一些示例数据为我的数据库建立种子。 这是由实现IDatabaseInitializer的类处理的,它看起来像这样: public class MyDbInitializer : DropCreateDatabaseAlways { private readonly IUserManager _userManager; public MyDbInitializer(IUserManager userManager) { _userManager = userManager; } protected override void Seed(MyDataContext context) { SeedIdentities(); } private void SeedIdentities() { var user = new User { UserName = “someUsername”, Email = “some@email.com” }; _userManager.CreateAsync(user, “Password”); } IUserManager是ASP.NET Identiy […]

OWIN Startup方法如何获取网站的基本URL?

OWIN启动方法如何获取网站的基本URL? 我正在尝试编写在使用IISExpress进行调试时可以正常工作的代码,使用自托管和IIS进行unit testing。 当自托管时,我可以在IAppBuilder.Properties [“host.Addresses”]中找到这些信息但是,当它在IISExpress下运行时(它没有检查IIS)它不存在。

如何在OWIN ASP.NET MVC5中注销用户

我有一个ASP.NET MVC5项目的标准AccountController类。 当我尝试注销用户时,我面临一个错误,因为HttpContext为null 。 (我的意思是HttpContext .GetOwinContext()。身份validation为空) 因此我无法了解会话结束时我们如何注销用户… 在global.asax我得到了这个 protected void Session_Start(object sender, EventArgs e) { Session.Timeout = 3; } protected void Session_End(object sender, EventArgs e) { try { var accountController = new AccountController(); accountController.SignOut(); } catch (Exception) { } } 的AccountController public void SignOut() { // Even if I do It does not help coz […]

.NET Framework中的复杂声明值与System.Security.Claims

我正在使用Asp.Net 5 MVC,Owin和Oauth2 bearer token作为auth类型开发一个Web应用程序。 按照本指南将Json序列化的自定义复杂声明成功添加到Microsoft.IdentityModel.Claims.ClaimsIdentity实例,我尝试使用System.Security.Claims命名空间上的ClaimsIdentity复制相同的示例。 不幸的是,似乎将一个complexClaim添加到ClaimsIdentity实例,派生的类类型信息将丢失,并且声明将存储为System.Security.Claims.Claim 。 var complexClaim = new ComplexClaim(@”http://it.test/currentpassport”, passport); var claims = new List() { complexClaim }; identity.AddClaims(claims); 当我尝试从身份中取回声明时,将其转换为ComplexClaim Type会产生空值。 var passportClaim = identity.Claims.FirstOrDefault(c=>c.Type == @”http://it.test/currentpassport”) as ComplexClaim; 相同的示例使用Microsoft.IdentityModel.Claims完美运行。 任何提示? 这是完整的移植代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json; using System.Security.Claims; namespace ConsoleApplication1 { class Program […]