如何在C#WEB API中成功验证后返回令牌?

时间:2016-07-29 19:54:02

标签: c# authentication asp.net-web-api

我不确定我是否在正确的轨道上,所以我希望有人可以指出我正确的方向。我正在用C#编写一个WEB API,我希望不同的客户能够使用它。第一个是AngularJS客户端。

我正在尝试创建一个登录部分。根据我的理解,它应该工作的方式是客户端使用用户名和密码调用登录功能。然后,在成功验证后,WEB API应该传回令牌。每次发出请求时,此令牌都会传回客户端。

我的控制器上有以下登录方法:

public HttpResponseMessage Login([FromBody]CredentialContainer credentials)
{
    var response = new HttpResponseMessage();
    if (Authenticate(credentials.UserName, credentials.password)) 
    { 
       //Generate the token and set it on the response (but how?)
       response.StatusCode = HttpStatusCode.OK;
    }
    else 
    {
       response.StatusCode = HttpStatusCode.Unauthorized;
    }

    return response; 
}

如何生成令牌然后将其设置在响应上,以便将其传送回客户端?我看过一些使用OAuth的示例,但我不想使用它,因为看起来您需要将凭据存储在某些OAuth数据库中。我想将凭证存储在应用程序的数据库中。

如果我最终了解如何设置令牌,我还提出了以下属性。

class MesssageAuthorizationAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        //Validate Token here if I can get it from the actionContext?  
    }

    protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
    {
       //not sure what to do here. Would not like the user to get a IIS credentials prompt.
    }
}

我在这里有正确的方法,还是我认为这一切都错了?

0 个答案:

没有答案