อยาก 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