인증 만들기
ThingWorx Flow는 모든 인증 체계를 처리할 수 있습니다. OAuth의 경우 구성으로 설정할 수 있는 더 간단한 처리 메커니즘이 있습니다. 다른 모든 인증은 연결로 분류되며 커넥터 개발자가 Connection 객체를 통해 서비스에 연결할 때 코딩해야 합니다.
대부분의 서비스에는 특정 형태의 인증이 필요합니다. add connection 및 add OAuth 명령을 사용하여 인증 메커니즘을 추가할 수 있습니다. ThingWorx Flow CLI 및 ThingWorx Flow 서버는 OAuth 2.0 및 OAuth 1.0 인증을 지원합니다.
일반적으로 사용되는 인증 방법이 다음 목록에 설명되어 있습니다.
기본 인증 - HTTP 프로토콜에 기본 제공되는 단순 인증 체계입니다. 요청을 만들 때 사용자 이름과 암호를 제공해야 합니다.
API 키 인증 - 데이터에 액세스할 수 있습니다. 예를 들어, 이 메커니즘은 키 값 쌍을 질의 문자열 매개 변수 또는 머리글로 보내는 것과 관련됩니다.
OAuth 기반 인증 - 암호를 제공하지 않고도 외부 서비스가 사용자의 계정 정보를 사용할 수 있게 해 주는 토큰 기반 인증 방법입니다. 예를 들어, 계정에 로그인하여 서비스의 리소스에 액세스할 수 있습니다.
예를 들어, Windchill은 기본 및 OAuth 기반 인증을 사용합니다.
OAuth 만들기
OAuth를 만들려면 다음을 수행합니다.
1. 명령 프롬프트에서 다음 명령을 실행합니다.
a. cd <user project root directory>
b. flow add oauth <oauth name>
* 
OAuth 이름은 하이픈(-)을 제외한 특수 문자를 포함할 수 없습니다. 예를 들어, OAuth 이름은 'connector name-oauth name'일 수 있습니다.
다음 옵션을 OAuth 명령에 사용할 수 있습니다.
옵션
설명
데이터 유형
--version
버전 번호를 표시합니다.
[부울]
--help
도움말을 표시합니다.
[부울]
--parentDir, -d
프로젝트에 대한 상위 디렉터리입니다.
[기본값: "."]
--logLevel, -1
로그 수준을 설정합니다.
[기본값: "info"]
--useV1
OAuth 버전 1 구성이 사용되었음을 나타냅니다.
[기본값: false]
새 폴더 <connector name-oauth name>config.json 파일로 구성된 <projectDir>/auth/oauth/에 작성됩니다.
예를 들어, Gmail 관련 작업을 워크플로에 사용하려면 먼저 Gmail 계정에 로그인한 후 다음 그림과 같이 ThingWorx Flow 워크플로가 사용자를 대신하여 특정 작업을 수행할 수 있도록 승인해야 합니다.
위 그림에 표시된 액세스 매개 변수는 config.json 파일에 설정됩니다. 완료된 config.json 파일은 다음과 같습니다.
{
"_id": "56a0df8552199d8d51e0280d",
"created_at": "2017-04-11T14:08:59.858Z",
"updated_at": "2017-04-11T14:08:59.858Z",
"uid": "oau652869757c50d1cfbd1061",
"category": "Google",
"name": "google_gmail",
"title": "Gmail",
"icon": "google-mail",
"__v": 0,
"version": "v1",
"oauth2_params_other": [
"{\"access_type\":\"offline\"}"
],
"oauth2_params_scope": [
"{\"https://www.googleapis.com/auth/gmail.labels\":\"Manage mailbox labels\"}",
"{\"https://www.googleapis.com/auth/gmail.insert\":\"Insert mail into your mailbox\"}",
"{\"https://www.googleapis.com/auth/gmail.modify\":\"All read/write operations except immediate, permanent deletion of threads and messages, bypassing Trash.\"}",
"{\"https://www.googleapis.com/auth/gmail.readonly\":\"Read all resources and their metadata—no write operations.\"}",
"{\"https://www.googleapis.com/auth/gmail.compose\":\"Create, read, update, and delete drafts. Send messages and drafts.\"}",
"{\"https://www.googleapis.com/auth/gmail.send\":\"Send email on your behalf\"}"
],
"oauth2_validate_method": "GET",
"oauth2_validate_headers": [
"{\"Authorization\":\"Bearer {access_token}\"}",
"{\"Content-Type\":\"application/json\"}"
],
"oauth2_validate_url": "https://www.googleapis.com/gmail/v1/users/me/labels",
"oauth2_refresh_data": [
"{\"grant_type\":\"refresh_token\"}",
"{\"refresh_token\":\"{refresh_token}\"}"
],
"oauth2_refresh_url": "/token",
"oauth2_token_data": [
"{\"grant_type\":\"authorization_code\"}"
],
"oauth2_token_url": "/token",
"oauth2_auth_query": [
"{\"response_type\":\"code\"}",
"{\"approval_prompt\":\"force\"}",
"{\"access_type\":\"{access_type}\"}"
],
"oauth2_auth_url": "/auth",
"oauth2_no_state": false,
"env_production_params": [
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}",
"{\"client_id\":\"{{{production.CLIENT_ID}}}\"}",
"{\"client_secret\":\"{{{production.CLIENT_SECRET}}}\"}"
],
"env_pre_prod_params": [
"{\"client_id\":\"{{{pre_prod.CLIENT_ID}}}\"}",
"{\"client_secret\":\"{{{pre_prod.CLIENT_SECRET}}}\"}",
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}"
],
"env_staging_params": [
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}",
"{\"client_id\":\"{{{staging.CLIENT_ID}}}\"}",
"{\"client_secret\":\"{{{staging.CLIENT_SECRET}}}\"}"
],
"env_development_params": [
"{\"client_id\":\"{{{development.CLIENT_ID}}}\"}",
"{\"client_secret\":\"{{{development.CLIENT_SECRET}}}\"}",
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}"
],
"env_local_params": [
"{\"client_id\":\"{{{local.CLIENT_ID}}}\"}",
"{\"client_secret\":\"{{{local.CLIENT_SECRET}}}\"}",
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}"
],
"base_url": "https://accounts.google.com/o/oauth2",
"oauth_type": "OAuth2",
"development_phase": "gold",
"advanced_enabled": true,
"express_enabled": true,
"deleted_at": null,
"published": true
}
* 
OAUTH_ENDPOINT_OAUTH_RETURN은 deploymentConfig.json 파일의 값을 토대로 Flow 서버에서 자동으로 보관됩니다.
표에는 config.json 파일의 다양한 중요한 필드 및 각 필드의 의미가 나와 있습니다.
config.json 파일 속성
속성
설명
base_url
기본 URL입니다. 자세한 내용은 IdP(ID 공급자) 설명서를 참조하십시오.
oauth_type
이 속성은 편집하지 마십시오.
기본적으로 CLI가 OAuth2 구성을 생성합니다. OAuth1 구성을 생성하려면 –useV1 옵션을 사용하십시오.
oauth2_params_scope
응용 프로그램이 정의한 범위이며 범위는 시스템에서 수행될 수 있는 작업을 결정합니다. 토큰의 범위는 사용자가 응용 프로그램에 액세스 권한을 부여한 범위입니다.
oauth2_auth_url
응용 프로그램에 대한 사용자 이름 및 암호 프롬프트에 대한 화면을 생성합니다.
이 값은 절대 URL일 수도 있고 기본 URL에 대한 상대 URL일 수도 있습니다.
oauth2_auth_query
인증 URL에 대해 요청을 만들 때 IDP가 요구하는 매개 변수입니다.
oauth2_token_url
액세스 토큰 또는 새로 고침 토큰을 요청하는 데 사용됩니다. 이 값은 절대 URL일 수도 있고 기본 URL에 대한 상대 URL일 수도 있습니다.
oauth2_token_data
oauth2_token_url로 보내야 할 데이터를 포함합니다.
oauth2_refresh_url
새로 고침 토큰을 생성합니다. 일부 IdP는 새로 고침 토큰을 요청하는 데 토큰 URL과 동일한 URL을 사용합니다.
oauth2_refresh_data
oauth2_refresh_url로 보낼 데이터를 포함합니다.
oauth2_validate_url
토큰의 유효성을 검사합니다.
oauth2_validate_headers
oauth2_validate_url로 보낼 요청의 머리글입니다.
oauth2_validate_method
HTTP 메소드는 유효성 검사 요청을 만드는 데 사용됩니다.
구성 파일에는 ThingWorx Flow가 다양한 OAuth2 작업을 실행하는 데 사용하는 정보가 포함되어 있습니다.
속성 값은 문자열의 배열이므로 이스케이프해야 합니다. 값은 상수 값일 수 있으며, 텍스트 대체를 사용할 수도 있습니다. env_local_params, env_staging_paramsenv_production_params를 사용하면 배포에 따라 여러 매개 변수의 값을 다양하게 변경할 수 있습니다.
config.json 파일에 있는 중요한 정보는 client_idclient_secret입니다.
커넥터를 배포하는 방법에 대한 자세한 내용은 배포 단원을 참조하십시오.
OAuth 구성에 중요한 정보나 테넌트 관련 정보는 포함하지 않아야 합니다. 여기에는 client_id 및 client_secret가 포함됩니다. 이러한 정보는 다음과 같이 지정됩니다.
"env_pre_prod_params": [
"{\"client_id\":\"{{pre_prod.CLIENT_ID}}\"}",
"{\"client_secret\":\"{{pre_prod.CLIENT_SECRET}}\"}",
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}"
],
"env_staging_params": [],
"env_development_params": [
"{\"client_id\":\"{{development.CLIENT_ID}}\"}",
"{\"client_secret\":\"{{development.CLIENT_SECRET}}\"}",
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}"
],
"env_local_params": [
"{\"client_id\":\"{{local.CLIENT_ID}}\"}",
"{\"client_secret\":\"{{local.CLIENT_SECRET}}\"}",
"{\"redirect_uri\":\"{OAUTH_ENDPOINT_OAUTH_RETURN}\"}"
],
정보가 배포와 관련이 없는 정보일 경우 배포 이름에 local 또는 development와 같은 접두사를 지정하지 않아야 합니다.
Google API를 사용하는 응용 프로그램을 작성하는 방법에 대한 도움말은 API 콘솔 도움말을 참조하십시오. 다른 응용 프로그램의 경우 IdP 또는 시스템 설명서를 참조하십시오.
OAuth 구성을 만드는 방법에 대한 자세한 내용은 부록 B를 참조하십시오.
기본 커넥터에 대한 OAuth 구성
ThingWorx Flow에는 OAuth가 인증을 수행하는 데 필요한 여러 커넥터가 포함되어 있습니다. 첫 번째 단계는 OAuth 로드 파일을 만드는 것입니다. 모든 또는 몇 가지 OAuth 구성을 활성화하도록 선택할 수 있습니다. OAuth 로드 파일은 다음과 같은 형식입니다.
{
"onedrive": {
"OneDrive": {
"CLIENT_ID": "<client-id-here>"
"CLIENT_SECRET": "<client-secret-here>"
}
}
"trello": {
"Trello": {
"CONSUMER_KEY":"<consumer-key-here>",
"CONSUMER_SECRET":"<consumer-secret-here>"
}
}
}
위의 파일에서 최상위 레벨 키는 커넥터의 이름입니다. OAuth2 구성 및 OAuth1 구성의 예는 OneDrive입니다.
각 커넥터의 client-idclient-secret을 취득하려면 문서를 참조하십시오. OAuth 구성의 디스플레이 이름은 다음 레벨입니다. 이 이름은 OAuth2 드롭다운에 <디스플레이 이름> 로그인 추가로 표시되는 텍스트입니다.
flow-deploy 도구를 사용하여 시스템에 OAuth를 로드합니다. connector 및 displayName을 기반으로 일치하는 구성이 이미 있으면 업데이트되고 그렇지 않으면 새 구성이 작성됩니다.
기본 제공 커넥터에 대해 OAuth를 구성하는 방법에 대한 자세한 내용은 ThingWorx 도움말 센터를 참조하십시오.
자세한 내용은 커넥터 배포 항목을 참조하십시오.
도구가 성공적으로 배포를 완료하면 새 OAuth를 사용할 수 있습니다.