簡體   English   中英

返回響應之前獲取OWIN承載令牌

[英]get OWIN bearer token before returning the response

我已經使用OWIN和不記名令牌實現了身份驗證,並且在用戶登錄時工作正常。

調用\\ Token URL並將用戶名/密碼傳遞給它時,會給出令牌作為響應。 但是我想將此令牌存儲在數據庫中,所以無需再次調用服務器,我可以用代碼獲取令牌嗎? 我無法在票證或任何其他對象中獲取生成的令牌的值。

             public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{ 
return Task.Factory.StartNew(() =>
 {

var username = context.UserName;

            var password = context.Password;


            var userService = new UserService();
            User user = userService.GetUserByCredentials(username, password);
            if (user != null)
            {
                var claims = new List<Claim>()
                {
                    new Claim(ClaimTypes.Name, user.userName),
                    new Claim("UserID", user.userName)
                };

                ClaimsIdentity oAutIdentity = new ClaimsIdentity(claims, Startup.OAuthOptions.AuthenticationType);


              var ticket = new AuthenticationTicket(oAutIdentity, new AuthenticationProperties() { });

         context.Validated(ticket);

            }
            else
            {
                context.SetError("invalid_grant", "Error");
            }
        });
    }

我正在調試代碼,但是令人驚訝的是,access_token似乎只有在郵遞員結果中才能看到。

令牌永遠無效。 每次身份驗證都會給出一個新令牌,並且該令牌在一定時間內有效。 將此令牌保存到數據庫沒有用。

你當然可以。 您只需要在TokenEndpointResponse重寫方法authServerProvider : OAuthAuthorizationServerProvider

OAuthTokenEndpointResponseContext內部,有一個名為accessToken的字段,您可以檢索令牌值。

   public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context)
        {
            // Summary:
            //     Called before the TokenEndpoint redirects its response to the caller.
            return Task.FromResult<object>(null);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM