簡體   English   中英

如何通過現有的WebAPI驗證我的MVC5應用程序?

[英]How can I authenticate my MVC5 application through an existing WebAPI?

我正在創建一個ASP.NET MVC 5應用程序。 無權訪問數據庫 我所做的一切都通過WebApi進行

我想通過此API對用戶進行身份驗證,同時獲得訪問令牌。

在不丟棄Visual Studio放在我的MVC 5應用程序中的所有帳戶維護代碼的情況下,如何做到這一點?

我以為這應該在框架中的某個地方,但是我在互聯網上找到的所有內容似乎都是黑客。 我拒絕破解任何涉及安全性的內容。 我怎樣才能做到這一點?

我正在使用原始的ASP.NET MVC 5應用程序。 這里沒有自定義代碼。

澄清:

每當用戶登錄時,如何在登錄邏輯中添加鈎子以從WebApi獲取令牌?

可能的解決方案:

我已經完成以下工作:

public class ApplicationSignInManager : SignInManager<ApplicationUser, string>
{
    // Constructor and other code have been hidden to simplify this sample.

    public override async Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool isPersistent, bool shouldLockout)
    {
        var status = await base.PasswordSignInAsync(userName, password, isPersistent, shouldLockout);

        if (status == SignInStatus.Success)
        {
            var baseAddress = new Uri(ConfigurationManager.AppSettings["WebApiAddress"]);

            var client = new HttpClient { BaseAddress = baseAddress };
            var response = await client.PostAsync("Token", new StringContent(String.Format("grant_type=password&username={0}&password={1}", userName, password), Encoding.UTF8));

            response.EnsureSuccessStatusCode();

            var tokenResponse = await response.Content.ReadAsStringAsync();
            var json = JObject.Parse(tokenResponse);

            var token = json["access_token"].ToString();
            token.ToString();

            HttpContext.Current.Session["AccessToken"] = token;
        }

        return status;
    }
}

我將重構此代碼,以使其成為方法調用。

如果這是個壞主意,請告訴我。 如果有更好的位置,也請告訴我。 我不喜歡這樣 感覺就像是駭客,但我不知道該怎么辦。

在默認模板中,您可以通過使用用戶名,密碼和grant_type調用/ token進行身份驗證,如下所示:

POST /token HTTP/1.1
Host: yoursite.com
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

grant_type=password&username=something@something.com&password=mypass

這應該返回一個令牌,您可以將其設置為連續請求中用於驗證用戶身份的標頭,例如:

GET /api/sms HTTP/1.1
Host: yoursite.com
Authorization: Bearer hegRkzAdXHE-JzAccW-ANpJEyyMU0gBS80ZMxMa1mtpbqGNNtvifMsHVM1O7AinNhIkQuyHbz3wrRcUA0veAC32N8_Oig5f58S6mXiNUbA4y7qLbr4HPyXBQLNq3F29LsnDWJ-cPCivWB13cPeS2en6q39E_ix2CErDDLh-X5i-vmOrK5XgqK1PUlIkyRoA6fvwKKQ3HVrQvNV3D0WSBlIt7i8ykMTnIofAj1_4hpmrQdlLaxq3zfUG9JQbeedUSP5WcjTs1dwdUcJrZWUDrGLHp8bgQ4Av_zx27opx25yyWLOdVsceeth2ytZ0G5vo_m_PCApN9TJGtU70eaYdLa0ZLLIXpG1pDilpGgTeT-bp1qhA8LqKxtXkH54X_o8GlOstoT6NjeyEBG80ZjmHZS_dMn_Uve-qKDGdKPM4JuvBRU2Cqt2M5FiUdGsDjdkOxFVb4xwfAaz0QbwmOAz7xIywIszfEw3blg4eQLefPBAM
Cache-Control: no-cache

暫無
暫無

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

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