웹 앱

웹 애플리케이션을 개발하는 경우 IBM Cloud® App ID 웹 플로우를 사용하여 안전하게 사용자를 인증할 수 있습니다. 그런 다음 사용자는 웹 앱에 있는 서버 측에서 보호된 컨텐츠에 액세스할 수 있습니다.

플로우에 대한 정보

웹 앱은 종종 사용자가 보호된 컨텐츠에 액세스하도록 인증해야 합니다. App ID은(는) OIDC 인증 코드 플로우를 사용하여 사용자를 안전하게 인증합니다. 이 플로우를 사용하는 경우 사용자가 인증되면 앱에서 권한 코드를 수신하게 됩니다. 그런 다음 이 코드가 액세스, ID 및 새로 고치기 토큰으로 교환됩니다. 코드에서 교환 단계에서는 항상 앱과 OIDC 서버 간의 보안 백채널을 사용하여 토큰을 전송합니다. 이 프로세스는 공격자가 토큰을 가로챌 수 없으므로 또 다른 보안 계층을 제공합니다. 이러한 토큰은 사용자 인증을 위해 웹 서버 호스팅 애플리케이션으로 직접 전송할 수 있습니다.

웹 앱 요청 흐름
웹 앱 요청 흐름

  1. 사용자는 App ID SDK 또는 API를 통해 /authorization 엔드포인트에 대한 요청을 전송함으로써 권한 플로우를 시작합니다.

  2. 사용자에게 권한이 없는 경우 App ID로 경로 재지정되면서 인증 플로우가 시작됩니다.

  3. 사용자의 /authorization 요청 매개변수 또는 ID 제공자 구성에 따라 사용자의 브라우저에서 로그인 위젯을 시작합니다.

  4. 사용자가 인증할 ID 제공자를 선택하고 사인인 프로세스를 완료합니다.

  5. ID 제공자는 인증 코드가 포함된 클라이언트 앱으로 경로 재지정됩니다.

  6. App ID SDK는 권한 코드를 App ID 서비스의 액세스, ID 및 선택적 새로 고치기 토큰으로 교환합니다.

  7. App ID SDK에서 토큰을 저장한 후 클라이언트 애플리케이션으로의 경로 재지정이 발생합니다.

  8. 사용자에게 앱에 대한 액세스 권한이 부여됩니다.

Node.js SDK 구성

Node.js 웹 애플리케이션에서 작동하도록 App ID를 구성할 수 있습니다.

시작하기 전에

다음과 같은 전제조건이 준비되어 있어야 합니다.

  • App ID 서비스의 인스턴스
  • 서비스 인증 정보 세트
  • NPM 버전 4 이상
  • 노드 버전 6 이상
  • App ID 서비스 대시보드의 경로 재지정 URI 세트

간단한 샘플 앱(Node )을 사용하여 직접 사용해 보세요.

Node.js SDK 설치

  1. 명령행을 사용하여 Node.js 앱이 포함된 디렉토리로 변경하십시오.

  2. App ID 서비스를 설치하십시오.

    npm install --save ibmcloud-appid
    

Node.js SDK 초기화

  1. 다음 require 정의를 server.js 파일에 추가하십시오.

    const express = require('express');
    const session = require('express-session')
    const passport = require('passport');
    const WebAppStrategy = require("ibmcloud-appid").WebAppStrategy;
    const CALLBACK_URL = "/ibm/cloud/appid/callback";
    
  2. express-session 미들웨어를 사용하도록 Express 앱을 설정하십시오.

    const app = express();
    app.use(session({
       secret: "123456",
       resave: true,
       saveUninitialized: true
    }));
    app.use(passport.initialize());
    app.use(passport.session());
    

    프로덕션 환경에 적합한 세션 스토리지로 미들웨어를 구성해야 합니다. 자세한 내용은 express.js.

  3. 다음 방법 중 하나를 통해 인증 정보를 받으십시오.

    • App ID 대시보드의 애플리케이션 탭으로 이동하십시오. 애플리케이션이 나열되지 않을 경우 애플리케이션 추가를 클릭하여 애플리케이션을 작성하십시오.

    • /management/v4/<tenantId>/applications 엔드포인트에 대한 POST 요청을 작성합니다.

      요청 형식:

      curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer <IAMToken>' \
      -d '{"name": "ApplicationName"}'
      

      리소스 예:

      {
      "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f",
      "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61",
      "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4",
      "name": "ApplicationName",
      "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61"
      }
      
  4. 선택사항: 경로 재지정 URI를 형식화하는 방법을 결정하십시오. 경로 재지정은 서로 다른 두 가지 방법으로 형식화할 수 있습니다. 다음 옵션 중 어느 것도 제공되지 않으면 App ID SDK는 IBM Cloud 에서 실행 중인 앱의 application_uri 을 검색하고 기본 접미사 /ibm/cloud/appid/callback 를 추가하려고 시도합니다.

    • WebAppStrategy({redirectUri: "...."})에서 수동으로 형식화
    • redirectUri로 이름 지정된 환경 변수로
  5. 이전 단계에서 얻은 정보를 사용하여 SDK를 초기화하십시오.

    passport.use(new WebAppStrategy({
    tenantId: "<tenantID>",
    clientId: "<clientID>",
    secret: "<secret>",
    oauthServerUrl: "<oauthServerURL>",
    redirectUri: "<appURL>" + CALLBACK_URL
    }));
    
  6. Passport의 직렬화 및 역직렬화를 구성하십시오. 이 구성 단계는 HTTP 요청 간의 인증된 세션 지속성을 위해 필요합니다. 자세한 내용은 여권 문서를 참조하세요.

    passport.serializeUser(function(user, cb) {
       cb(null, user);
       });
    passport.deserializeUser(function(obj, cb) {
       cb(null, obj);
       });
    
  7. 다음 코드를 server.js 파일에 추가하여 서비스 경로 재지정을 실행하십시오.

    app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME));
    
  8. 다음 코드 스니펫을 app.js 파일에 추가하여 보호된 엔드포인트를 등록하십시오.

    app.get(‘/protected_resource’, passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res) {res.json(req.user); });
    

자세한 정보는 App ID Node.js GitHub 저장소를 참조하십시오.

Liberty for Java SDK 구성

Liberty for Java 웹 애플리케이션에서 작동하도록 App ID를 구성할 수 있습니다.

시작하기 전에

다음과 같은 전제조건이 준비되어 있어야 합니다.

  • App ID 서비스의 인스턴스
  • 서비스 인증 정보 세트
  • Apache Maven 3.5 이상
  • Java 1.8
  • A Liberty for Java 웹 애플리케이션

간단한 샘플 앱(Liberty for Java )을 사용하여 직접 사용해 보세요.

Liberty for Java SDK 설치

  1. server.xml에 OpenID Connect 기능을 추가하십시오.

    <featureManager>
       <feature>ssl-1.0</feature>
       <feature>appSecurity-2.0</feature>
       <feature>openidConnectClient-1.0</feature>
    </featureManager>
    
  2. 두 가지 방법 중 하나를 통해 인증 정보를 받으십시오.

    • App ID 대시보드의 애플리케이션 탭으로 이동하십시오. 애플리케이션이 없는 경우 애플리케이션 추가를 클릭하여 새 애플리케이션을 작성하십시오.

    • /management/v4/<tenantID>/applications 엔드포인트에 대한 POST 요청을 작성합니다.

      요청 형식:

      curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
      -H 'Content-Type: application/json' \
      -H 'Authorization: Bearer <IAMToken>' \
      -d '{"name": "ApplicationName"}'
      

      리소스 예:

      {
      "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f",
      "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61",
      "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4",
      "name": "ApplicationName",
      "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61"
      }
      
  3. Open ID Connect 클라이언트 기능을 작성한 후 다음과 같은 플레이스홀더를 정의하십시오. 서비스 인증 정보를 사용하여 플레이스홀더를 채우십시오.

    <openidConnectClient
       clientId='App ID client_ID'
       clientSecret='App ID Secret'
       authorizationEndpointUrl='oauthServerUrl/authorization'
       tokenEndpointUrl='oauthServerUrl/token'
       jwkEndpointUrl='oauthServerUrl/publickeys'
       issuerIdentifier='Changed according to the region'
       tokenEndpointAuthMethod="basic"
       signatureAlgorithm="RS256"
       authFilterid="myAuthFilter"
       trustAliasName="ibm.com"
    >
    
    Liberty for Java 앱에 대한 OIDC 요소 변수
    컴포넌트 설명
    clientID
    secret
    oauth-server-url
    2단계를 완료하여 서비스 인증 정보를 받으십시오.
    authorizationEndpointURL oauthServerURL의 끝에 /authorization을(를)추가하십시오.
    tokenEndpointUrl oauthServerURL의 끝에 /token을(를)추가하십시오.
    jwkEndpointUrl oauthServerURL의 끝에 /publickeys을(를)추가하십시오.
    issuerIdentifier 발행자 ID의 양식은 &lt;region>&gt;.cloud.ibm.com입니다. 사용 가능한 지역에 대해 자세히 알아보십시오.
    tokenEndpointAuthMethod "basic"으로 지정됩니다.
    signatureAlgorithm "RS256"으로 지정됩니다.
    authFilterid 보호할 리소스의 목록입니다.
    trustAliasName 신뢰 저장소 내에서 인증서의 이름입니다.

Liberty for Java SDK 초기화

  1. server.xml 파일에서 보호된 리소스를 지정하는 권한 필터를 정의하십시오. 필터를 정의하지 않으면 서비스에서 모든 리소스를 보호합니다.

    <authFilter id="myAuthFilter">
       <requestUrl id="myRequestUrl" urlPattern="/protected_resource" matchType="contains"/>
    </authFilter>
    
  2. 특수 주제 유형을 ALL_AUTHENTICATED_USERS로 정의하십시오.

    <application type="war" id="ProtectedServlet" context-root="/appidSample" location="${server.config.dir}/apps/libertySample-1.0.0.war">
       <application-bnd>
             <security-role name="myrole">
                <special-subject type="ALL_AUTHENTICATED_USERS"/>
             </security-role>
       </application-bnd>
    </application>
    
  3. 에서 libertySample-1.0.0.war 파일을 다운로드하고 GitHub 에서 파일을 다운로드하여 서버의 앱 폴더에 넣습니다. 예를 들어 서버의 이름이 defaultServer인 경우 war 파일은 target/liberty/wlp/usr/servers/defaultServer/apps/로 이동할 수 있습니다.

  4. server.xml 파일에 다음 코드를 추가하여 SSL을 구성하십시오. 신뢰 저장소도 작성해야 합니다.

       <keyStore id="defaultKeyStore" password="myPassword"/>
       <keyStore id="appidtruststore" password="Liberty" location="${server.config.dir}/mytruststore.jks"/>
       <ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" trustStoreRef="appidtruststore"/>
    

기본적으로 SSL 구성을 사용하려면 OpenID Connect에 대한 신뢰 저장소를 구성해야 합니다. 리버티에서 OpenID 연결 클라이언트 구성에 대해 자세히 알아보세요.

Spring Boot for Java SDK 구성

Spring Boot 애플리케이션에서 작동하도록 App ID를 구성할 수 있습니다.

시작하기 전에

다음과 같은 전제조건이 준비되어 있어야 합니다.

  • App ID 서비스의 인스턴스
  • 서비스 인증 정보 세트
  • Java + Maven 프로젝트
  • Apache Maven 3.5 이상
  • Java 1.8
  • Spring Boot 2.0 및 Security OAuth 2.0 이상

Spring Boot 프레임워크 초기화

  1. Maven pom.xml 파일의 <project> </project> 태그 사이에 다음 코드를 추가합니다.

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.2.RELEASE</version>
       <relativePath/>
    </parent>
    
  2. Maven pom.xml 파일에 다음 종속 항목을 추가하십시오.

    <dependencies>
       <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
       </dependency>
       <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-security</artifactId>
       </dependency>
       <dependency>
             <groupId>org.springframework.security.oauth.boot</groupId>
             <artifactId>spring-security-oauth2-autoconfigure</artifactId>
             <version>2.0.0.RELEASE</version>
       </dependency>
    </dependencies>
    
  3. 동일한 파일에 Maven 플러그인을 포함하십시오.

    <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    

OAuth2 초기화

  1. Java 파일에 다음 어노테이션을 추가하십시오.

    @SpringBootApplication
    @EnableOAuth2Sso
    
  2. WebSecurityConfigurerAdapter로 클래스를 확장하십시오.

  3. 보안 구성을 모두 대체한 후 보호된 엔드포인트를 등록하십시오.

       @Override
       protected void configure(HttpSecurity http) throws Exception {
          http.authorizeRequests()
                   .antMatchers("/protected_Resource").authenticated()
                   .and().logout().logoutSuccessUrl("/").permitAll();
       }
    

인증 정보 추가

  1. 다음 방법 중 하나를 통해 인증 정보를 받으십시오.

    • App ID 대시보드의 애플리케이션 탭으로 이동하십시오. 애플리케이션이 없는 경우 애플리케이션 추가를 클릭하여 새 애플리케이션을 작성하십시오.

    • /management/v4/<tenantID>/applications 엔드포인트에 대한 POST 요청을 작성합니다.

      • 요청 형식:
        curl -X POST \  https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
        -H 'Content-Type: application/json' \
        -H 'Authorization: Bearer <IAMToken>' \
        -d '{"name": "ApplicationName"}'
        
      • 리소스 예:
        {
        "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f",
        "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61",
        "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4",
        "name": "ApplicationName",
        "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61"
        }
        
  2. application.yml 디렉토리에 /springbootsample/src/main/resources/ 구성 파일을 추가하십시오. 서비스 인증 정보의 정보를 사용하여 구성을 완료할 수 있습니다.

    security:
    oauth2:
       client:
       clientId: <clientID>
       clientSecret: <clientSecret>
       accessTokenUri: <oauthServerURL>/token
       userAuthorizationUri: <oauthServerURL>/authorization
       resource:
       userInfoUri: <oauthServerURL>/userinfo
    

다른 언어로 App ID 사용

OIDC 준수 클라이언트 SDK를 사용하는 경우 다른 언어로 App ID를 사용할 수 있습니다. 자세한 내용은 인증된 라이브러리 목록을 확인하세요.

다음 단계

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