自定义身份验证服务器

时间:2015-07-28 21:08:32

标签: c# asp.net-mvc claims-based-identity jwt

过去一天,我一直在网上磕磕绊绊,试图找出如何将MVC ASP.NET 4.5应用程序附加到我使用bitoftech.net上发布的示例创建的身份验证服务器(http://bitoftech.net/2015/01/21/asp-net-identity-2-with-asp-net-web-api-2-accounts-management/

现在身份验证/ webapi服务器本身运行良好,我不得不制作一些mod来使其在MySQL中运行,但总而言之,它正在工作并保护webapi端点,在这方面非常出色。

但对于我的生活,我无法弄清楚如何让MVC应用程序简单地使用此令牌端点来使用令牌并对用户进行身份验证。

我可以调用令牌api作为登录表单的一部分并接收令牌,但我不知道我是如何使用该令牌在MVC应用程序中使用的。另外我认为我完全错了,因为我认为OWIN中间件应该是调用认证服务器的中间件。但是在说,我不希望用户导航到认证服务器进行登录。

这有点令人困惑,我对这种类型的身份验证非常陌生,看起来我读的越多,我就越困惑,也许是因为所有不同的例子,所有的略有不同的方法和一些非常过时的例子。

所以,如果有人能够指出我的一个例子,那就是我想要实现的目标,我会非常感激。

此致 杰森科利

这是我的帐户服务用于调用身份服务器的代码

var client = new OAuth2Client(new Uri(oathBaseUrl()));
TokenResponse token = await client.RequestResourceOwnerPasswordAsync(model.Email, model.Password);

我在这里使用了Thinktecture.IdentityModel.Client来简化这个过程。

我也使用下面的方法,它确实正确地为我提供了访问令牌。

        using (var client = new HttpClient(new HttpClientHandler ))
        {
            client.BaseAddress = new Uri(oathBaseUrl());
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            var values = new Dictionary<string, string>
            {
                { OAuth2Constants.GrantType, OAuth2Constants.Password },
                { OAuth2Constants.UserName, model.Email },
                { OAuth2Constants.Password, model.Password }
            };

            var form = new FormUrlEncodedContent(values);

            var response = client.PostAsync("", form).Result;
            if (response.IsSuccessStatusCode)
            {
                response.EnsureSuccessStatusCode();

                var tokenResponse = response.Content.ReadAsStringAsync().Result;
                var json = JObject.Parse(tokenResponse);
                var jwt = json["access_token"].ToString();

1 个答案:

答案 0 :(得分:0)

最简单的方法是将令牌值传递到httponly cookie并以正常方式在您的应用中使用它来识别用户。如果您发布获得令牌的代码,我可能会扩展;有库可以为你处理这个