簡體   English   中英

使用oauth進行mvc和web.api授權

[英]mvc and web.api authorisation using oauth

似乎我在問一個同樣的問題,許多人有但不能將所有東西放在一起。 我有一個使用標准身份數據庫配置了Oauth的標准MVC應用程序,該用戶登錄並且一切正常,然后我希望將Web.API應用程序稱為經過身份驗證的用戶。 從我的研究中,我已經將不記名令牌添加到httpclient,以為這將在web.api應用程序中得到授權,因此我已將Web.API應用程序設置為指向相同的身份數據庫,但不確定自己缺少什么。 我花了幾天時間,沒有運氣,所以任何樣品將不勝感激。

獲取承載令牌的代碼是

protected string GetToken()
    {
        var identity = new ClaimsIdentity(Startup.OAuthBearerOptions.AuthenticationType);
        identity.AddClaim(new Claim(ClaimTypes.Name, User.Identity.Name));
        identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, User.Identity.GetClaimValue(ClaimTypes.NameIdentifier.ToString())));
        AuthenticationTicket ticket = new AuthenticationTicket(identity, new AuthenticationProperties());
        var currentUtc = new SystemClock().UtcNow;
        ticket.Properties.IssuedUtc = currentUtc;
        ticket.Properties.ExpiresUtc = currentUtc.Add(TimeSpan.FromMinutes(30));
        string accessToken = Startup.OAuthBearerOptions.AccessTokenFormat.Protect(ticket);
        return accessToken;
    }

Web.APi的調用是

var token = GetToken();
        string uri = UriEASOnlineApi + EASOnlineWebAPI.SignErectors;

        List<SignErector> result;
        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            var task = await client.GetAsync(uri);
            if (task.IsSuccessStatusCode)
            {
                var jsonString = await task.Content.ReadAsStringAsync();
                result = JsonConvert.DeserializeObject<List<SignErector>>(jsonString);
            }
            else
            {
                throw new Exception($"failed: {task.StatusCode}");
            }
        }

首先,您需要了解如何在WebApi中完成身份驗證。 然后,如果您有調用此WebApi的有效示例(例如,來自Postman或Fiddler),則可以將手動請求與通過MVC應用程序以編程方式創建的請求進行比較。

暫無
暫無

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

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