2019年1月29日 星期二

OAuth2 Server實作,使用 Spring Boot

參考文件:
Spring OAuth 2 Developers Guide

如果你有很多系統但想用同一個方式登入,存取資源的話,建立 OAuth2 Server是一個好方法,可以參考 spring-security-oauth的方式來建立。 但目前很多範例是用 Spring Boot來建立,我參考的 Secure Spring REST With Spring Security and OAuth2 (github source code) 就是。
幾個點跟大家分享:


儲存 token, user帳號、宓碼會有三種方式
1.InMemory的方式,也是預設的方式

2.把資訊記錄在資料庫內,使用 jdbc data store,參考的範例內有 H2和 Postgresql,其它分享有用 MySQL的方式,如果是用 H2的話,一開始應該會放在本機,如果要用 remote模式要參考 Allow remote access to H2 Database設定,宓碼變更請參考 set password

3.jwt方式spring security 5.1開始就只支援這種方式


文章有提到會建立 Authorization Server, Resource Server,實際上是建立相關的 configuration class設定的動作,基本上有三個,也可以只寫一個 class extends 三個類別

2019年1月28日 星期一

Spring Boot

Spring Boot出來很久了,但因為工作上沒有使用到,所以一直沒有學習,最近又想了解 OAuth2才知道它的存在,短暫的學習心得,發現它跟 .Net Core有類似,用大量 annotation, dependency injection,還有以前的 xml設定檔,現在都用 class替代了,有興趣的人可以參考如下網站

Spring Boot 基础
Adding Classpath Dependencies
Building microservices with Netflix OSS, Apache Kafka and Spring Boot – Part 1: Service registry and Config server
Deploy a Spring Boot MicroService with Netflix OSS stack in Docker Container

2019年1月6日 星期日

ASP.Net Core 2.2 on Docker with certification

如果要使用自己的自制憑證和跑在 docker上,我的 dockerfile和 appsetting.json檔案參考如下:

docker file
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2

WORKDIR /app
 
ENV ASPNETCORE_URLS https://*:443
EXPOSE 443

COPY . /app

ENV ASPNETCORE_ENVIRONMENT production

ENTRYPOINT ["dotnet", "xxxxx.dll"]


appsetting.json
{
  "ConnectionStrings": {
      ................................................
  },
  "Logging": {
         .....................................
  },

  "Kestrel": {
    "Certificates": {
      "Default": {
        "Path": "certificate_file_name.pfx",
        "Password": "xxxxxxxxxxxxxxx"

      },
      "AllowInvalid": "true"
    }
  }
}

ASP.Net Core 2.2 在 Docker container使用 EF Core連結 SQL Server出現問題

參考:SqlException: Connection Timeout Expired. The timeout period elapsed during the post-login phase.

在 windows 環境下直接執行 asp.net core 2.2的程式透過 entity framework core連接 SQL server是沒有問題的情況,想說放在 docker上執行,但一直發生 timeout的情況,後來找到一篇文章提到要更新 SQL Server的 patch到最新的版本試試。

Asp.Net Core 2.2 使用 HttpClient 連結 SSL網址處理方法

參考: [faq]解決C#呼叫有ssl憑證問題的網站出現遠端憑證是無效的錯誤問題

加上 handler處理


var handler = new HttpClientHandler();
handler.ClientCertificateOptions = ClientCertificateOption.Manual;
handler.ServerCertificateCustomValidationCallback =
    (httpRequestMessage, cert, cetChain, policyErrors) =>
{   
  return true;
};
var client = new HttpClient(handler);