Rails에서 Doorkeeper+devise로 API에서 OAuth2 인증

7509 단어 Rails
Rails를 API 서버로 응용 프로그램을 개발할 때 인증 처리 방법을 미리 기록합니다.

doorkeeper+devise라는 gem을 사용합니다.


devise는 Rails에서 사용자 인증을 실현할 때 자주 사용하는 Gem이고, doorkeeper는 OAuth2 인증을 실현하는 Gem이다.
이 두 가지를 조합하여 API의 OAuth2 인증을 실현합니다.

설치에 필요한 Gem


Gemfile에 필요한gem을 추가합니다.
Gemfile
# 認証機能を使うためのgem
gem 'devise'
gem 'omniauth'
gem 'doorkeeper'
gem 'oauth2'

그리고 bundle install
$ bundle install

비디오 설정


다음 명령을 실행합니다.
명령을 실행하면 devise에 필요한 프로필을 만들 것입니다.
$ bundle exec rails g devise:install
그런 다음 devise에서 사용자 인증을 지원하는 User 모델을 만듭니다.
$ bundle exec rails g devise user
$ bundle exec rake db:migrate
사용자 인증 User 모델이 만들어졌습니다.

doorkeeper 설치


다음은 OAtuh2 인증을 지원하는 doorkeeper를 설정합니다.
$ bundle exec rails g doorkeeper:install
$ bundle exec rails g doorkeeper:migration
$ bundle exec rake db:migrate

이렇게 되면 Dorkeeeper에 필요한 설정 파일·DB 제작이 완료된다.
다음 단계는 Devise의 사용자 인증에 대응하기 위해 initializers/doorkeeper입니다.rb의 resourceowner_아래와 같이 autinticator 블록을 변경합니다.
initializers/doorkeeper.rb
resource_owner_authenticator do
  current_user || warden.authenticate!(:scope => :user)
end

다음은 User의 이메일 및 password 액세스 토큰을 받기 위한 추가 설정입니다.
initializers/doorkeeper.rb

resource_owner_from_credentials do |routes|
    request.params[:user] = {:email => request.params[:username], :password => request.params[:password]}
    request.env["devise.allow_params_authentication"] = true
    request.env["warden"].authenticate!(:scope => :user)
  end
이 설정은 여기까지입니다.

doorkeeper의 OAuth2 인증 사용 방법


애플리케이션 등록


doorkeeper에서 페이스북과 트위터의 API처럼 앱을 등록할 수 있는데, 앱에 있어서는 Applicationid, Secret_id, Callback_URL을 설정할 수 있습니다.
그리고 Application.id 및 시크릿id를 사용한 다음 사용자의 이메일,password에서access를 진행합니다토큰을 얻다.
bundle exec rails에서 Rails 서버를 시작하고/oauth/applications에 접근하면 현재 등록된 프로그램 목록을 표시합니다.

New Application 버튼을 누르면 프로그램 생성 창이 표시되며, 프로그램 이름과 URL을 입력하면 다음과 같은 프로그램이 생성되고 Application이 실행됩니다.id 및 시크릿키를 가져올 수 있습니다.

access_Token이 없는 고객의 접근을 제한하는 것은 Controller 설정을 통해 이루어진다.
class Api::V1::ProductsController < Api::V1::ApiController
  before_action :doorkeeper_authorize! # Require access token for all actions

  # your actions
end

API를 사용한 이메일, password의 OAuth2 인증 테스트


루비 표준 포장의irb에서 다음 스크립트를 실행하면 OAtuh2 인증을 확인할 수 있습니다.
require 'oauth2'

client_id     = '...' # your client's id generated with rake db:setup
client_secret = '...' # your client's secret
site          = "http://localhost:3000" # your provider server, mine is running on localhost
user_email    = '...' 
user_password = '...'


client = OAuth2::Client.new(client_id, client_secret, :site => site)
token  = client.password.get_token(user_email, user_password)

token.get('/api/v1/controller/action') 

참조 링크


https://github.com/doorkeeper-gem/doorkeeper
https://github.com/doorkeeper-gem/doorkeeper/wiki/Using-Resource-Owner-Password-Credentials-flow
https://github.com/doorkeeper-gem/doorkeeper/wiki/Testing-your-provider-with-OAuth2-gem
https://github.com/plataformatec/devise#getting-started

좋은 웹페이지 즐겨찾기