prosource

.NET 웹 API 2 OWIN 베어러 토큰 인증

probook 2023. 10. 5. 23:23
반응형

.NET 웹 API 2 OWIN 베어러 토큰 인증

저는 웹 API 2 서비스 아키텍처를 제 안에 구현하고 있습니다.NET 웹 응용 프로그램.요청을 사용하는 클라이언트는 mvc/asp.net 가 아닌 순수한 javascript입니다.저는 OWIN을 사용하여 웹 API 샘플로 OWIN 베어러 토큰 인증을 이 문서에 따라 활성화하려고 합니다.인증 후 인증 단계에서 누락된 점이 있는 것 같습니다.

내 로그인은 다음과 같습니다.

    [HttpPost]
    [AllowAnonymous]
    [Route("api/account/login")]
    public HttpResponseMessage Login(LoginBindingModel login)
    {
        // todo: add auth
        if (login.UserName == "a@a.com" && login.Password == "a")
        {
            var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
            identity.AddClaim(new Claim(ClaimTypes.Name, login.UserName));

            AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
            var currentUtc = new SystemClock().UtcNow;
            ticket.Properties.IssuedUtc = currentUtc;
            ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));

            DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 

            return new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new ObjectContent<object>(new  
                { 
                    UserName = login.UserName,
                    AccessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket)
                }, Configuration.Formatters.JsonFormatter)
            };
        }

        return new HttpResponseMessage(HttpStatusCode.BadRequest);
    }

돌아오다

{
   accessToken: "TsJW9rh1ZgU9CjVWZd_3a855Gmjy6vbkit4yQ8EcBNU1-pSzNA_-_iLuKP3Uw88rSUmjQ7HotkLc78ADh3UHA3o7zd2Ne2PZilG4t3KdldjjO41GEQubG2NsM3ZBHW7uZI8VMDSGEce8rYuqj1XQbZzVv90zjOs4nFngCHHeN3PowR6cDUd8yr3VBLdZnXOYjiiuCF3_XlHGgrxUogkBSQ",
   userName: "a@a.com"
}

그런 다음 HTTP 헤더를 설정하려고 합니다.BearerAngular에서 추가 요청이 있을 경우.JS는 다음과 같습니다.

$http.defaults.headers.common.Bearer = response.accessToken;

다음과 같은 API를 제공합니다.

    [HttpGet]
    [Route("api/account/profile")]
    [Authorize]
    public HttpResponseMessage Profile()
    {
        return new HttpResponseMessage(HttpStatusCode.OK)
        {
            Content = new ObjectContent<object>(new
            {
                UserName = User.Identity.Name
            }, Configuration.Formatters.JsonFormatter)
        };
    }

하지만 제가 이 서비스를 어떻게 하든 '무단'입니다.내가 뭘 빠트렸나요?

베어러 + 토큰으로 헤더 'Authorization'을 설정하면 다음과 같이 해결됩니다.

$http.defaults.headers.common["Authorization"] = 'Bearer ' + token.accessToken;

각진 응용 모듈로 구성할 수 있습니다.따라서 authorization token은 모든 http 요청에 대해 헤더로 설정됩니다.

var app = angular.module("app", ["ngRoute"]);
app.run(function ($http) {

     $http.defaults.headers.common.Authorization = 'Bearer ' + token.accessToken;

});

언급URL : https://stackoverflow.com/questions/19769422/net-web-api-2-owin-bearer-token-authentication

반응형