asp.net權限認證:OWIN實現OAuth 2.0 之密碼模式(Resource Owner Password Credential)


客戶端模式定義

用戶向客戶端提供用戶名密碼。客戶端使用這些信息,向“服務提供商” 進行認證。

 

先上密碼模式的工作流程圖:

 

密碼模式和客戶端模式差不多,但是此時User已經非常信任Client,以至於連User的認證口令都給Client;

這通常用在用戶對客戶端高度可信的情況下出現這種情況 認證服務器只有在其他授權模式無法執行的情況下,才能考慮使用這種模式

注意:這種認證模式默認還是需要客戶端模式支持的哦;即在認證過程中同樣會認證Client的權限;

而且,這種認證模式,需要認證的資源(Resource)已經和User有關系了哦。

 

AuthorizationServer與ResourceServer還是用上一講的項目

新建項目ResourceOwnerPasswordCredentialGrant

 

    static void Main(string[] args)
        {
            const string url = "http://localhost:8270/";
            var client = new HttpClient();

            var clientId = "123456";
            var clientSecret = "abcdef";
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                "Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(clientId + ":" + clientSecret)));

            // 密碼模式
            var parameters = new Dictionary<string, string>();
            parameters.Add("grant_type", "password");
            parameters.Add("UserName", "UserName");
            parameters.Add("Password", "Password");

            // 提交
            var result = client.PostAsync(url + "OAuth/Token", new FormUrlEncodedContent(parameters)).Result.Content.ReadAsStringAsync().Result;
            var entity = JsonConvert.DeserializeObject<Token>(result);
            Console.WriteLine("Token: {0}", entity.AccessToken);

            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", entity.AccessToken);
            var result2 = client.GetAsync("http://localhost:8001/api/Values").Result.Content.ReadAsStringAsync().Result;
            Console.WriteLine("Result: {0}", result2);

            Console.ReadKey();
        }

注意這幾句哦:

var clientId = "123456";           // 客戶端的認證口令(即默認還是需要認證客戶端的權限的哦)
var clientSecret = "abcdef";
。。。

parameters.Add("grant_type", "password"); // 指定服務端以密碼模式認證
parameters.Add("UserName", "UserName");    // User的認證口令
parameters.Add("Password", "Password");

 客戶端有效代碼就這些了,我再來看看服務端需要哪些更改

 

 1、Startup.Auth.cs文件修改OnGrantResourceOwnerCredentials = GrantResourceOwnerCredentials

 這個方法就是后台處理密碼模式認證關鍵的地方

 

 

我們看看他的實現過程,也很簡單的

 

OK,我們來看看運行效果;

 

 認證成功!是不是很簡單呀?

 

asp.net權限認證系列

  1. asp.net權限認證:Forms認證
  2. asp.net權限認證:HTTP基本認證(http basic)
  3. asp.net權限認證:Windows認證
  4. asp.net權限認證:摘要認證(digest authentication)
  5. asp.net權限認證:OWIN實現OAuth 2.0 之客戶端模式(Client Credential)
  6. asp.net權限認證:OWIN實現OAuth 2.0 之密碼模式(Resource Owner Password Credential)
  7. asp.net權限認證:OWIN實現OAuth 2.0 之授權碼模式(Authorization Code)
  8. asp.net權限認證:OWIN實現OAuth 2.0 之簡化模式(Implicit)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM