使用Owin Token验证API

时间:2018-05-26 10:20:43

标签: asp.net-mvc authentication oauth-2.0 asp.net-web-api2 owin

我有一个MVC网站,其中使用了表单身份验证,并且身份存储在会话中。我们修改了帐户控制器(LogOn方法)代码并删除了会话并使用Owin进行身份验证。

Request.GetOwinContext().Authentication.SignIn(properties, claimsIdentity)

启动时,它正在使用CookieAuthentication。

这适用于后续请求,因为令牌存储在cookie中。

我们还需要将此令牌作为承载(或在自定义标头中)发送,以便api可以对请求进行身份验证。由于API托管在不同的服务器上,因此我们为MVC和amp;设置了相同的机器密钥。的WebAPI。

但是,这不起作用。有没有更好的方法来解密令牌并获得索赔详情?或者无缝验证令牌,并在验证时允许请求。

Web Startup

app.UseCookieAuthentication(new CookieAuthenticationOptions()
        {
            AuthenticationType = Auth_type,
            LoginPath = new PathString("/home/about"),
            LogoutPath = new PathString("/home/index"),
            SlidingExpiration = true,
            CookieSecure = CookieSecureOption.Never,
            CookieHttpOnly = false
        });

家/关于

if (!Request.GetOwinContext().Authentication.User.Identity.IsAuthenticated)
        {
            var id = GetId() as MyIdentity;
            var prop = Getprop();
            Request.GetOwinContext().Authentication.SignIn(prop, id);
        }

Api Startup

var OAuthOptions = new OAuthBearerAuthenticationOptions
            {
                AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Passive,
                AuthenticationType = OAuthDefaults.AuthenticationType,
            };
            app.UseOAuthBearerAuthentication(OAuthOptions);

API授权属性

public class MyAuthorizeAttribute: AuthorizeAttribute
    {
        public override void OnAuthorization(HttpActionContext actionContext)
        {
            // check identity here
            base.OnAuthorization(actionContext);
        }
    }

JS调用API

var token = getCookie(".AspNet.ApplicationCookie");
                $.ajax({
                    type: "GET",
                    beforeSend: function (request) {
                        request.setRequestHeader("Authorization", "Bearer " + token);
                    },
                    url: "http://localhost:1231/authapi/api/values/get?id=1",

                    success: function (msg) {
                        alert("Success" + msg)
                    },
                    error: function (d) {
                        debugger;
                        alert("Error" + d.responseText)
                    }

                });

0 个答案:

没有答案