백엔드 앱

IBM Cloud® App ID SDK 및 API를 사용하여 백엔드 애플리케이션 엔드포인트 및 API를 보호할 수 있습니다.

플로우에 대한 정보

백엔드 앱을 개발하는 중에 권한이 없는 액세스로부터 API가 보호되는지 확인하게 됩니다. App ID SDK를 사용하면 API 엔드포인트를 보호할 수 있고 앱의 보안이 보장됩니다.

이 플로우의 기술적 기반은 무엇입니까?

App ID 를 구현하고 OAuth 2.0 및 인증 및 권한 부여를 위해 무기명 토큰을 사용하는 OIDC 사양을 구현합니다. 이러한 토큰은 디지털 서명이 되어 있고 인증 대상과 ID 공급자를 설명하는 클레임을 포함하는 JSON 웹 토큰으로 형식이 지정됩니다. 애플리케이션의 API는 액세스 및 ID 토큰을 통해 보호됩니다. API에 액세스해야 하는 클라이언트는 이러한 토큰과 교환하여 App ID를 통해 ID 제공자로 인증할 수 있습니다. 보호된 API에 대한 액세스 권한을 부여하기 위해서는 토큰에 있는 청구를 유효성 검증해야 합니다.

App ID에서 토큰을 사용하는 방법에 대한 자세한 정보는 토큰 이해를 참조하십시오.

이 플로우의 형태는 어떻습니까?

caption-side=bottom"
App ID 백엔드 흐름 백엔드 애플리케이션 흐름

  1. 클라이언트는 액세스 토큰을 얻기 위해 App ID 권한 서버에 대한 POST 요청을 수행합니다. POST 요청의 양식은 일반적으로 다음과 같습니다.

    POST /oauth/v4/<tenantID>/token HTTP/1.1
    Content_type: application/x-www-form-urlencoded
    Authorization header = "Basic" + base64encode(<clientID>:<secret>)
    FormData = <grantType>
    
  2. 클라이언트가 자격을 충족하는 경우 권한 서버에서 액세스 토큰을 리턴합니다.

  3. 클라이언트는 보호된 리소스에 대한 요청을 전송합니다. 사용 중인 HTTP 클라이언트 라이브러리에 따라 다양한 방법으로 요청을 전송할 수 있지만 요청의 형식은 일반적으로 다음과 같습니다.

    curl -H 'Authorization: Bearer <accessToken>'
    <https://my-protected-resource.com>
    
  4. 보호된 리소스 또는 API에서 토큰을 유효성 검증합니다. 토큰이 유효한 경우 해당 클라이언트에 리소스에 대한 액세스 권한이 부여됩니다. 토큰을 유효성 검증할 수 없는 경우 액세스가 거부됩니다.

Liberty for Java를 사용하도록 앱을 구성하는 방법에 대한 정보는 빠른 시작: Liberty for Java 백엔드 앱 튜토리얼을 참조하십시오.

Node.js SDK를 사용하여 리소스 보호

App ID SDK를 사용하여 서버 측 애플리케이션에 대한 인증 및 권한 부여를 적용할 수 있습니다. ApiStrategy는 요청의 일부로 액세스 및 ID 토큰을 유효성 검증하도록 요구하여 백엔드 리소스에 보안을 적용하기 위해 작동합니다. App ID Node.js SDK는 Passport 프레임워크와 함께 작동합니다.

App ID를 사용한 백엔드 Node 애플리케이션 보호에 대해 학습하려면 다음 동영상을 확인하십시오. 그런 다음 간단한 샘플 앱(Node )을 사용하여 직접 사용해 보세요.

시작하기 전에

Node.js SDK를 시작하기 전에 다음과 같은 전제조건이 충족되어야 합니다.

  • App ID의 인스턴스
  • NPM 버전 4 이상
  • 노드 버전 6 이상

Node.js SDK 설치

  1. App ID Node.js SDK를 앱의 package.json 파일에 추가하십시오.

    "dependencies": {
       "ibmcloud-appid": "^7.0.0"
    }
    
  2. 다음 명령을 실행하십시오.

    npm install
    

Node.js SDK 초기화

  1. oauth server url을 가져오십시오.

    1. App ID 대시보드의 서비스 인증 정보 탭으로 이동하십시오.
    2. 아직 인증 정보 세트가 없는 경우 새 인증 정보를 클릭한 후 추가를 클릭하여 새 세트를 작성하십시오. 인증 정보 세트가 있는 경우에는 이 단계를 건너뛰십시오.
    3. 인증 정보 보기 토글을 클릭하여 정보를 확인하십시오.
    4. 다음 단계에서 사용하기 위해 oauth server url을 복사하십시오.
  2. 다음 예제와 같이 App ID 패스포트 전략을 초기화하십시오.

    var express = require('express'); 
    var passport = require('passport');
    var APIStrategy = require('ibmcloud-appid').APIStrategy; 
    passport.use(new APIStrategy({ oauthServerUrl: "<oauthServerUrl>" })); 
    var app = express();
    app.use(passport.initialize());
    

API 전략을 사용하여 API에 보안 적용

다음 스니펫은 Express 앱에서 ApiStrategy를 사용하여 /protected GET API를 보호하는 방법을 보여줍니다.

Node.js 앱이 IBM Cloud에서 실행되고 App ID의 인스턴스에 바인드되어 있는 경우 API 전략 구성을 제공할 필요가 없습니다. App ID 구성은 VCAP_SERVICES 환경 변수를 사용하여 정보를 가져옵니다.

 app.get('/protected_resource', passport.authenticate('APIStrategy.STRATEGY_NAME', { session: false }), function(request, response){
   console.log("Security context", request.appIdAuthorizationContext);
   response.send(200, "Success!");
   }
);

토큰이 유효한 경우 요청 체인에 있는 다음 미들웨어가 호출되고 요청 오브젝트에 appIdAuthorizationContext 특성이 추가됩니다. 이 특성에는 원래 액세스 및 ID 토큰과 해당 토큰의 디코딩된 페이로드 정보가 포함되어 있습니다.

Swift SDK를 사용하여 리소스 보호

App ID 서버 측 Swift SDK는 백엔드 앱을 보호하는 데 사용되는 API 보호 미들웨어 플러그인을 제공합니다. API를 미들웨어와 연관시킴으로써 무단 액세스로부터 앱을 보호할 수 있습니다. API가 보호된 후에 미들웨어는 App ID에 의해 생성된 토큰이 유효성 검증되는지 확인합니다. 그리고 유효성 검증 결과에 따라 API의 작동을 수정할 수 있습니다.

import Foundation
import Kitura              // server
import Credentials         // middleware
import IBMCloudAppID       // SDK

// setup routes
let router = Router()

// mandatory option to be passed in if app not deployed on IBM Cloud
let options = [
    "oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/d8438de6-c325-4956-ad34-abd49194affd",
]
let apiCreds = Credentials()

// Minimum macOS version required
if #available(OSX 10.12, *) {

    // setup API protection
    let apiKituraCredentialsPlugin = APIKituraCredentialsPlugin(options: options)
    apiCreds.register(plugin: apiKituraCredentialsPlugin)

    // associate route with API protection
    router.all(middleware: apiCreds)

    // create protected API
    router.get("/protectedendpoint") { request, response, next in

        response.headers["Content-Type"] = "text/html; charset=utf-8"
        do {
            if let userProfile = request.userProfile  {
                try response.status(.OK).send(
                    "<!DOCTYPE html><html><body>" +
                        "Welcome " + userProfile.displayName  +
                        "! You are logged in with " + userProfile.provider + "." +
                    "</body></html>\n\n").end()
                next()
                return
            }
            try response.status(.unauthorized).send(
                "<!DOCTYPE html><html><body>” + “You are not authorized!" +
                "</body></html>\n\n").end()
        }
        catch {}
        next()
    }

    // Start server
    Kitura.addHTTPServer(onPort: 8090, with: router)

    Kitura.run()  
}

수동으로 리소스 보호

백엔드 앱 및 보호된 리소스에 보안을 적용하려면 토큰을 유효성 검증해야 합니다. 클라이언트에서 리소스에 대한 요청을 전송하면 해당 토큰이 정의된 스펙을 충족하는지 확인할 수 있습니다. 토큰에는 식별 정보, 범위 또는 적용된 기타 구성이 포함될 수 있습니다. 여러 가지 방법으로 App ID 액세스 및 ID 토큰을 유효성 검증할 수 있습니다. 도움말은 토큰 유효성 검증을 참조하십시오.

다음 단계

애플리케이션에 App ID가 설치되면 사용자 인증을 시작할 준비가 거의 된 것입니다! 이제 다음 활동 중 하나를 수행하십시오.