การเชื่อมต่อ OAuth2 ด้วย .NET C#

อยาก  Login ด้วย OAuth2 กับ .NET C# ต้องทำอย่างไร

             สำหรับตัวอย่างนี้เอามาจาก GitHub Project : https://github.com/titarenko/OAuth2[1]
ซึ่งเป็น Code ตัวอย่างนำมาเพิ่ม ในส่วนของการเชื่อมต่อ PSU Passport ดังนี้

  • เพิ่ม class file ใน project OAuth2->Client->Impl ชื่อ PassportClient.cs เนื้อหาดังนี้
    using Newtonsoft.Json.Linq;
    using OAuth2.Configuration;
    using OAuth2.Infrastructure;
    using OAuth2.Models;
    
    namespace OAuth2.Client.Impl
    {
     /// <summary>
     /// Passport authentication client.
     /// </summary>
     public class PassportClient : OAuth2Client
     {
        /// <summary>
        /// Initializes a new instance of the <see cref="PassportClient"/> class.
        /// </summary>
        /// <param name="factory">The factory.</param>
        /// <param name="configuration">The configuration.</param>
        public PassportClient(IRequestFactory factory, IClientConfiguration configuration)
            : base(factory, configuration)
        {
        }
    
        /// <summary>
        /// Defines URI of service which issues access code.
        /// </summary>
        protected override Endpoint AccessCodeServiceEndpoint
        {
            get
            {
                return new Endpoint
                {
                     BaseUri = "https://oauth.psu.ac.th",
                     Resource = "?oauth=authorize"
                };
            }
        }
    
        /// <summary>
        /// Defines URI of service which issues access token.
        /// </summary>
        protected override Endpoint AccessTokenServiceEndpoint
        {
            get
            {
                return new Endpoint
                {
                     BaseUri = "https://oauth.psu.ac.th",
                     Resource = "?oauth=token"
                };
            }
        }
    
        /// <summary>
        /// Defines URI of service which allows to obtain information about user which is currently logged in.
        /// </summary>
        protected override Endpoint UserInfoServiceEndpoint
        {
            get
            {
                return new Endpoint
                {
                     BaseUri = "https://oauth.psu.ac.th",
                     Resource = "?oauth=me"
                };
            }
        }
    
        /// <summary>
        /// Friendly name of provider (OAuth2 service).
        /// </summary>
        public override string Name
        {
            get { return "Passport"; }
        }
    
    
        /// <summary>
        /// Should return parsed <see cref="UserInfo"/> from content received from third-party service.
        /// </summary>
        /// <param name="content">The content which is received from third-party service.</param>
        protected override UserInfo ParseUserInfo(string content)
        {
            var response = JObject.Parse(content);
            return new UserInfo
            {
                 Id = response["user_login"].Value<string>(),
                 FirstName = response["user_login"].Value<string>(),
                 LastName = "",
                 Email = response["user_email"].SafeGet(x => x.Value<string>())
            };
        }
      }
    }
    
  • จากนั้นทำการแก้ไข Web.config ใน Project OAuth2.Example เพิ่มข้อความดังนี้
     <add clientType="PassportClient"
     enabled="true"
     clientId="testclient3"
     clientSecret="testpass3"
     redirectUri="~/auth" />
  • โดยต้องแจ้ง Redirect URI ให้ผู้ดูแลระบบ จากนั้นทางผู้ดูแลระบบจะแจ้ง Client ID และ Client Secret รวมถึงชื่อ Server ในการใช้งานให้ทราบ (ชื่อ server ใส่ในไฟล์ก่อนหน้านี้)
  • เมื่อรันโปรแกรม จะปรากฎหัวข้อ Login มากมายให้เลือก ให้ทดสอบในส่วนของ Login passport
  • หลังจากนั้นจะปรากฎหน้า Login ซึ่งอันนี้หน้าตาแล้วแต่ผู้ดูแลจะสร้างครับ (อันนี้ผมทำแค่เป็นตัวอย่างนะครับ)
  •  หลักจากนั้นจะปรากฎหน้าถามเพื่อขออนุญาตให้สิทธิ์การใช้งาน
  • จากนั้นระบบจะเด้งกลับมายังหน้าแรกแต่จะแสดงข้อความ Profile ดังรูป
  •   ตัวอย่างนี้ในการใช้งานจริงต้องนำไปประยุกต์เองครับ ซึ่งแสดงให้เห็นวิธีการใช้งาน OAuth สำหรับ .NET C# ว่าวิธีไม่ได้ต่างกับการใช้งาน CMS แต่อย่างใดครับ

==================================

Reference :

[1] OAuth2 client implementation for .NET : https://github.com/titarenko/OAuth2