Rails에서 Doorkeeper+devise로 API에서 OAuth2 인증
7509 단어 Rails
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.rbresource_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
Reference
이 문제에 관하여(Rails에서 Doorkeeper+devise로 API에서 OAuth2 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/arakaji/items/39818b207f9c1c3c4058
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# 認証機能を使うためのgem
gem 'devise'
gem 'omniauth'
gem 'doorkeeper'
gem 'oauth2'
$ bundle install
$ bundle exec rails g devise:install
$ bundle exec rails g devise user
$ bundle exec rake db:migrate
$ bundle exec rails g doorkeeper:install
$ bundle exec rails g doorkeeper:migration
$ bundle exec rake db:migrate
resource_owner_authenticator do
current_user || warden.authenticate!(:scope => :user)
end
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에서 페이스북과 트위터의 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
Reference
이 문제에 관하여(Rails에서 Doorkeeper+devise로 API에서 OAuth2 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/arakaji/items/39818b207f9c1c3c4058
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Rails에서 Doorkeeper+devise로 API에서 OAuth2 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/arakaji/items/39818b207f9c1c3c4058텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)