2 Ocak 2020 Perşembe

Open standard for Authorization - OAuth2

OAuth2 Nedir
 Açıklaması şöyle. Http ile çalışır.
OAuth 2.0 is the industry-standard protocol for authorization. OAuth 2.0 focuses on client developer simplicity while providing specific authorization flows for web applications, desktop applications, mobile phones, and living room devices.It works over Http, so irrespective of the programming languages java, csharp, php, python.. etc. any client they deal with Http can consume these Identity server features. OAuth tells how to work with tokens, how to obtain token , what information we can include in tokens..etc. 
Token kullanıldığı için servisler arasında şifre gönderimi olmaz. Açıklaması şöyle.
When using OAuth tokens, passwords are not shared between services. Instead, tokens are used for authentication
OAuth ile roller şöyle
There are four different roles within OAuth2 we need to consider:

Resource Owner — an entity that is able to grant access to its protected resources
Authorization Server — grants access tokens to Clients after successfully authenticating Resource Owners and obtaining their authorization
Resource Server — a component that requires an access token to allow, or at least consider, access to its resources
Client — an entity that is capable of obtaining access tokens from authorization servers
Client Nedir
Mesela internette fotoğraf basan bir uygulama olsun. Bu uygulamanın "Google Images" üzerinde saklı benim fotoğraflarıma erişmesini isteyelim. Bu senaryoda Client fotoğraf basan internet sitesidir. 
Client uygulamanın Resource Server'a erişime ihtiyacı vardır.

Resource Server Nedir
Bu senaryoda Resource Server "Google Images" sunucusudur. Resource Server üzerindeki bir şeye erişmek için Access Token ile birlikte başvurmak gerekir. Açıklaması şöyle.  
In OAuth 2.0, a resource server is a service designed to handle domain-logic requests and does not have any kind of login workflow or complex authentication mechanism: It receives a pre-obtained access token that guarantees a user have grant permission to access the server and delivers the expected response.
Resource Server token üretemez. Açıklaması şöyle. Resource Server token'ı doğrulamak için Authorization Server'ı kullanır
A resource server has no responsibility to obtain valid credentials: It will only check if the token is valid and proceed with the method execution.
Resource Owner Nedir
"Google Images" sunucusundaki fotoğrafların sahibi kullanıcıdır.

Authorization Server Nedir
Bu senaryoda Google'a ait bir sunucudur. Açıklaması şöyle
Authorization Server is responsible for authenticating your identity and gives you an authorization token, so that you can request resource server for your data with this token. this token is called access_token
Authorization Server'ın endpoint'ine "Basic Authentication" ile POST isteği gönderilir. Şöyle yaparız. Karşılığında bir token alırız. Burada POST isteği önemli
POST http://localhost:8080/oauth/token
Authorization: Basic Y2xpZW50X2lkOnNlY3JldA==
...
scope=read&grant_type=password&username=user&password=password
Grant Tipleri
OAuth2 Grant Tipleri yazısına taşıdım.

Access Token
Kullanıcı ve belirtilen yetkisi ile belirtilen kaynağa erişmek için verilen izin anlamına gelir.

Bu token belli bir süre sonra bayatlar. Örneğin 1 saat. OAuth sunucusu session ya da başka bir şey bilmez. Sadece token'ların ve ne zaman bayatlayacaklarını bilir.

Refresh Token
Access token değildir. Access Token ve Refresh Token için farklı URL'ler kullanılabilir. Şöyle yaparız
@RestController
public class TokenController {

  @RequestMapping("oauth/access_token")
  public TokenResponse getAccessToken() {
    ...
  }

  @RequestMapping("oauth/refresh_token")
  public TokenResponse getRefreshToken() {
    ...
  }
}
Offline Access Token
Ömrü daha uzun olan Access Token tipidir. Örneğin 1 sene.

Request Token
Şöyle yaparız. Kullanıcı ve yetkisine göre Access Token istemek diye düşünebiliriz.
curl -v -X GET --url "https://url-to-the-service.com/oauth/requestToken?
oauth_version=1.0& \
oauth_timestamp=1516721112& \
oauth_nonce=25794& \
oauth_signature_method=PLAINTEXT& \
oauth_consumer_key=CONSUMER_KEY& \
oauth_signature=CONSUMER_SECRET%26"




Hiç yorum yok:

Yorum Gönder