인증 API

이 문서는 인증 API에 대한 설명입니다. 인증 API는 HTTP POST를 사용하여 JSON 데이터를 주고 받습니다.

서버 주소

테스트 서버 : https://test-auth.protx.io

API 레퍼런스

인증

ID와 password를 사용해서 로그인을 합니다.

  • userType 은 현재 사용되지 않습니다.

  • idpassword 로 인증합니다.

  • 만약 token 이 있다면 token 의 기간 연장을 합니다.

  • 성공한 경우 새로운 JWT 토큰을 받습니다(token). 또한 사용자 정보도 받습니다(name, userId, telNo, email).

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/auth/auth-user' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "id": "test",
  "password": "1111"
}'

VP(Verifiable Presentation)를 사용하여 로그인 합니다.

  • VP 본문을 vp`` 에 넣습니다.

  • 자체 로그인인 경우 requestId 는 필요하지 않습니다. requestId 는 웹로그인 시에 필요합니다. 브라우저가 QR 코드를 보여주면 사용자 앱은 QR 코드를 읽어서 requetId 에 넣어서 로그인을 시도해야 합니다.

  • 성공한 경우 새로운 JWT token을 받습니다. 또한 사용자 정보도 받습니다 (name, userId, telNo, email).

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/auth/auth-user-with-vp' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "vp": {
    "verifiableCredential" : [ {
      "credentialSubject" : {
        "name" : "asd",
        "phone" : "432-4324",
        "sub" : "01022223333",
        "id" : "did:ethr:0xb80a41cd53c3a42faa5a5f58e61909e50df811e0"
      },
      "issuer" : {
        "id" : "did:ethr:0xd284cdc964af8a01d82d0caa7deeba82785b54f4"
      },
      "type" : [ "VerifiableCredential", "Profile" ],
      "@context" : [ "https://www.w3.org/2018/credentials/v1" ],
      "issuanceDate" : "2022-10-18T09:14:22.000Z",
      "proof" : {
        "type" : "JwtProof2020",
        "jwt" : "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiUHJvZmlsZSJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJuYW1lIjoiYXNkIiwicGhvbmUiOiI0MzItNDMyNCIsInN1YiI6IjAxMDIyMjIzMzMzIn19LCJzdWIiOiJkaWQ6ZXRocjoweGI4MGE0MWNkNTNjM2E0MmZhYTVhNWY1OGU2MTkwOWU1MGRmODExZTAiLCJuYmYiOjE2NjYwODQ0NjIsImlzcyI6ImRpZDpldGhyOjB4ZDI4NGNkYzk2NGFmOGEwMWQ4MmQwY2FhN2RlZWJhODI3ODViNTRmNCJ9.PqUOVrxFI8Bmt2UKjJ2oF6oFNkV_0s9xzJczPwkDf8_fueJdBoK3OuOKnWPfS-wgSDTDMpyNlf_m27DoxvA1pA"
      }
    } ],
    "holder" : "did:ethr:0xb80a41cd53c3a42faa5a5f58e61909e50df811e0",
    "verifier" : [ "did:ethr:0xd284cdc964af8a01d82d0caa7deeba82785b54f4" ],
    "type" : [ "VerifiablePresentation", "VerifiableCredential", "Profile" ],
    "@context" : [ "https://www.w3.org/2018/credentials/v1" ],
    "issuanceDate" : "2022-10-18T09:14:26.000Z",
    "proof" : {
      "type" : "JwtProof2020",
      "jwt" : "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2cCI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iLCJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlByb2ZpbGUiXSwidmVyaWZpYWJsZUNyZWRlbnRpYWwiOlsiZXlKaGJHY2lPaUpGVXpJMU5rc2lMQ0owZVhBaU9pSktWMVFpZlEuZXlKMll5STZleUpBWTI5dWRHVjRkQ0k2V3lKb2RIUndjem92TDNkM2R5NTNNeTV2Y21jdk1qQXhPQzlqY21Wa1pXNTBhV0ZzY3k5Mk1TSmRMQ0owZVhCbElqcGJJbFpsY21sbWFXRmliR1ZEY21Wa1pXNTBhV0ZzSWl3aVVISnZabWxzWlNKZExDSmpjbVZrWlc1MGFXRnNVM1ZpYW1WamRDSTZleUp1WVcxbElqb2lZWE5rSWl3aWNHaHZibVVpT2lJME16SXRORE15TkNJc0luTjFZaUk2SWpBeE1ESXlNakl6TXpNekluMTlMQ0p6ZFdJaU9pSmthV1E2WlhSb2Nqb3dlR0k0TUdFME1XTmtOVE5qTTJFME1tWmhZVFZoTldZMU9HVTJNVGt3T1dVMU1HUm1PREV4WlRBaUxDSnVZbVlpT2pFMk5qWXdPRFEwTmpJc0ltbHpjeUk2SW1ScFpEcGxkR2h5T2pCNFpESTROR05rWXprMk5HRm1PR0V3TVdRNE1tUXdZMkZoTjJSbFpXSmhPREkzT0RWaU5UUm1OQ0o5LlBxVU9WcnhGSThCbXQyVUtqSjJvRjZvRk5rVl8wczl4ekpjelB3a0RmOF9mdWVKZEJvSzNPdU9LbldQZlMtd2dTRFRETXB5TmxmX20yN0RveHZBMXBBIl19LCJuYmYiOjE2NjYwODQ0NjYsImlzcyI6ImRpZDpldGhyOjB4YjgwYTQxY2Q1M2MzYTQyZmFhNWE1ZjU4ZTYxOTA5ZTUwZGY4MTFlMCIsImF1ZCI6WyJkaWQ6ZXRocjoweGQyODRjZGM5NjRhZjhhMDFkODJkMGNhYTdkZWViYTgyNzg1YjU0ZjQiXX0.fLwCJfdJdtZDtAm8jipG7EJ_Qyrv-03XmwGWnWOhyGg_XNFKX4K271HB2zkTIUbcbU8VavjlWMNlkuwEiV8Kog"
    }
  }
}'

아래 그림은 auth-user-by-app, cancel-auth-user-by-app, auth-user-result-by-app api를 사용해서 웹 로그인 과정을 도식화 한 것입니다. 이 api 들은 서버 스크립트에서 호출됩니다.

DID 로그인을 요청합니다.

  • requestId 는 웹 사이트 별로 구분된 식별자입니다. 일반적으로 사이트 주소 + "?"를 사용하면 됩니다.

  • waitTime 은 로그인 대기시간을 초 단위로 지정합니다.

  • 성공한 경우 requestId 가 발행됩니다. 이 식별자를을 가지고 앱을 통해 로그인 성공했는지를 확인하는데 사용됩니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/auth/auth-user-by-app' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "requestId": "https://my.domain?",
  "waitTime": 60
}'

인증 요청을 취소합니다.

  • requestId 는 취소하고자 하는 request 식별자입니다.

  • waitTime는 사용되지 않습니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/auth/cancel-auth-user-by-app' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{
  "requestId": "https://my.domain?requestId=1666328121807_6979"
}'

로그인이 성공했는지를 확인합니다.

  • requestId 는 로그인 요청 식별자입니다.

  • waitTime 은 사용되지 않습니다.

  • 성공 시 JWT token 을 받습니다. 또한 사용자 추가 정보도 받습니다 (name, userId, telNo, email).

  • 응답 요청한 적이 없다면 400 에러가 발생합니다.

  • 앱 로그인 처리를 기다리는 경우 401 에러가 발생합니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/auth/auth-user-result-by-app' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "requestId": "https://my.domain?requestId=1666328121807_6979"
}'

DID (Decentralized Identifier)

DID를 생성합니다.

  • alias 는 DID를 식별하는 별칭입니다.

  • 사용자가 만든 address 와 비밀키 secretKey 를 전달해 줍니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/did/create-did' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "alias": "4700634FB09E0019",
  "address": "0x38b45217e81548733f9fd7443ecfe4ea6b5725cf",
  "secretKey": "a728102d411b1871f7ae91505b4e1558"
}'

VC (Verifiable Credential)를 생성합니다.

해당 인증서를 발급받기 위해서는 본 인증 시스템에서 발행한 JWT가 필요합니다. 이를 위해 사전에 /auth/auth-user를 호출하여야 합니다.

  • holder 는 이미 발행한 사용자 DID 입니다.

  • issuer 는 인승시스템에서 제공하는 발행자 DID 입니다.

  • userInfo 에는 key/value 포맷으로 추가 정보를 지정할 수 있습니다.

  • 성공한 경우 VC를 발급받습니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/did/create-vc' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ0ZXN0Iiwicm9sZSI6IlJPTEVfVVNFUiIsImV4cCI6MTY2ODkyMzY5MSwidXNlciI6IjQ3MDA2MDM2NDRCNzAwMDQiLCJpYXQiOjE2NjYzMzE2OTF9.c2BMNGbTUNV6HQAIBy9nHOTEK8nZOex1r-ntO3KLlNY' \
  -H 'Content-Type: application/json' \
  -d '{
  "holder": "did:ethr:0x38b45217e81548733f9fd7443ecfe4ea6b5725cf",
  "issuer": "did:ethr:0xd284cdc964af8a01d82d0caa7deeba82785b54f4",
  "userInfo": {
     "name": "Hong"
  }
}'

VC를 검증합니다.

  • body 에는 VC 본문을 넣습니다.

  • 성공한 경우verified 가 true 입니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/did/verify-vc' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "credentialSubject": {
    "name": "Hong",
    "sub": "test",
    "id": "did:ethr:0x38b45217e81548733f9fd7443ecfe4ea6b5725cf"
  },
  "issuanceDate": "2022-10-21T05:56:06.000Z",
  "proof": {
    "type": "JwtProof2020",
    "jwt": "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiUHJvZmlsZSJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJuYW1lIjoiSG9uZyIsInN1YiI6InRlc3QifX0sInN1YiI6ImRpZDpldGhyOjB4MzhiNDUyMTdlODE1NDg3MzNmOWZkNzQ0M2VjZmU0ZWE2YjU3MjVjZiIsIm5iZiI6MTY2NjMzMTc2NiwiaXNzIjoiZGlkOmV0aHI6MHhkMjg0Y2RjOTY0YWY4YTAxZDgyZDBjYWE3ZGVlYmE4Mjc4NWI1NGY0In0.IvrseTkX-lnadHg7TrPcBaTC5utYIr72nbQRgdNS_jwSPy4fypUxu7_2xaJw1IqHy71-uTp1B52hAz7ZeRb89g"
  },
  "type": [
    "VerifiableCredential",
    "Profile"
  ],
  "@context": [
    "https://www.w3.org/2018/credentials/v1"
  ],
  "issuer": {
    "id": "did:ethr:0xd284cdc964af8a01d82d0caa7deeba82785b54f4"
  }

VP (Verifiable Presentation)를 생성합니다.

  • holder 는 사용자가 이미 발행한 DID 입니다.

  • verifier 는 검증자 DID 입니다.

  • credentials 에는 VC 목록이 들어갑니다.

  • 성공한 경우 VP 가 생성됩니다.

Example

curl -X 'POST' \
  'https://test-auth.protx.io/v2/did/create-vp' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "holder": "did:ethr:0xa54545a4e45cf5a229438695c6bea23c5d1414c9",
  "verifier": "did:ethr:0xd284cdc964af8a01d82d0caa7deeba82785b54f4",
  "credentials": [
  {
    "credentialSubject" : {
      "userId" : "sus",
      "name" : "ss",
      "phone" : "019-3992-6444",
      "birthdate" : "2022-10-19",
      "dRegNumber" : "ss",
      "sub" : "7005550002",
      "id" : "did:ethr:0xa54545a4e45cf5a229438695c6bea23c5d1414c9"
    },
    "issuer" : {
      "id" : "did:ethr:0xa3bbf50a3c3a4180521325cb99ea301142b3634e"
    },
    "type" : [ "VerifiableCredential", "Profile" ],
    "@context" : [ "https://www.w3.org/2018/credentials/v1" ],
    "issuanceDate" : "2022-10-19T10:42:13.000Z",
    "proof" : {
      "type" : "JwtProof2020",
      "jwt" : "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiUHJvZmlsZSJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJ1c2VySWQiOiJzdXMiLCJuYW1lIjoic3MiLCJwaG9uZSI6IjAxOS0zOTkyLTY0NDQiLCJiaXJ0aGRhdGUiOiIyMDIyLTEwLTE5IiwiZFJlZ051bWJlciI6InNzIiwic3ViIjoiNzAwNTU1MDAwMiJ9fSwic3ViIjoiZGlkOmV0aHI6MHhhNTQ1NDVhNGU0NWNmNWEyMjk0Mzg2OTVjNmJlYTIzYzVkMTQxNGM5IiwibmJmIjoxNjY2MTc2MTMzLCJpc3MiOiJkaWQ6ZXRocjoweGEzYmJmNTBhM2MzYTQxODA1MjEzMjVjYjk5ZWEzMDExNDJiMzYzNGUifQ.LrTCG_SPXE-qpicQvTlaw666cmDpsZEILPpCAVRMBbjB-Yp-GMY0arqTxgc0rTRD3XlXV57JhCkZKYBZ261Dxg"
    }
  }  
  ]
}'

VP를 검증합니다.

  • body 에는 VP 본문을 넣습니다.

  • 성공 시 verified 가 true 입니다.

Example

{
  "issuanceDate": "2022-10-21T06:16:23.000Z",
  "verifier": [
    "did:ethr:0xd284cdc964af8a01d82d0caa7deeba82785b54f4"
  ],
  "holder": "did:ethr:0xa54545a4e45cf5a229438695c6bea23c5d1414c9",
  "proof": {
    "type": "JwtProof2020",
    "jwt": "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2cCI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVQcmVzZW50YXRpb24iLCJWZXJpZmlhYmxlQ3JlZGVudGlhbCIsIlByb2ZpbGUiXSwidmVyaWZpYWJsZUNyZWRlbnRpYWwiOlsiZXlKaGJHY2lPaUpGVXpJMU5rc2lMQ0owZVhBaU9pSktWMVFpZlEuZXlKMll5STZleUpBWTI5dWRHVjRkQ0k2V3lKb2RIUndjem92TDNkM2R5NTNNeTV2Y21jdk1qQXhPQzlqY21Wa1pXNTBhV0ZzY3k5Mk1TSmRMQ0owZVhCbElqcGJJbFpsY21sbWFXRmliR1ZEY21Wa1pXNTBhV0ZzSWl3aVVISnZabWxzWlNKZExDSmpjbVZrWlc1MGFXRnNVM1ZpYW1WamRDSTZleUoxYzJWeVNXUWlPaUp6ZFhNaUxDSnVZVzFsSWpvaWMzTWlMQ0p3YUc5dVpTSTZJakF4T1Mwek9Ua3lMVFkwTkRRaUxDSmlhWEowYUdSaGRHVWlPaUl5TURJeUxURXdMVEU1SWl3aVpGSmxaMDUxYldKbGNpSTZJbk56SWl3aWMzVmlJam9pTnpBd05UVTFNREF3TWlKOWZTd2ljM1ZpSWpvaVpHbGtPbVYwYUhJNk1IaGhOVFExTkRWaE5HVTBOV05tTldFeU1qazBNemcyT1RWak5tSmxZVEl6WXpWa01UUXhOR001SWl3aWJtSm1Jam94TmpZMk1UYzJNVE16TENKcGMzTWlPaUprYVdRNlpYUm9jam93ZUdFelltSm1OVEJoTTJNellUUXhPREExTWpFek1qVmpZams1WldFek1ERXhOREppTXpZek5HVWlmUS5MclRDR19TUFhFLXFwaWNRdlRsYXc2NjZjbURwc1pFSUxQcENBVlJNQmJqQi1ZcC1HTVkwYXJxVHhnYzByVFJEM1hsWFY1N0poQ2taS1lCWjI2MUR4ZyJdfSwibmJmIjoxNjY2MzMyOTgzLCJpc3MiOiJkaWQ6ZXRocjoweGE1NDU0NWE0ZTQ1Y2Y1YTIyOTQzODY5NWM2YmVhMjNjNWQxNDE0YzkiLCJhdWQiOlsiZGlkOmV0aHI6MHhkMjg0Y2RjOTY0YWY4YTAxZDgyZDBjYWE3ZGVlYmE4Mjc4NWI1NGY0Il19.AjFvyK-4yYH7PHMZT2c-ZsBiquX8ZPZARwmMHcYNtkup15CqCgq1GFcQOWEtvDfwkj8abJH4kH4ffCreWR1tWQ"
  },
  "type": [
    "VerifiablePresentation",
    "VerifiableCredential",
    "Profile"
  ],
  "@context": [
    "https://www.w3.org/2018/credentials/v1"
  ],
  "verifiableCredential": [
    {
      "credentialSubject": {
        "userId": "sus",
        "name": "ss",
        "phone": "019-3992-6444",
        "birthdate": "2022-10-19",
        "dRegNumber": "ss",
        "sub": "7005550002",
        "id": "did:ethr:0xa54545a4e45cf5a229438695c6bea23c5d1414c9"
      },
      "issuer": {
        "id": "did:ethr:0xa3bbf50a3c3a4180521325cb99ea301142b3634e"
      },
      "type": [
        "VerifiableCredential",
        "Profile"
      ],
      "@context": [
        "https://www.w3.org/2018/credentials/v1"
      ],
      "issuanceDate": "2022-10-19T10:42:13.000Z",
      "proof": {
        "type": "JwtProof2020",
        "jwt": "eyJhbGciOiJFUzI1NksiLCJ0eXAiOiJKV1QifQ.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSJdLCJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiUHJvZmlsZSJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJ1c2VySWQiOiJzdXMiLCJuYW1lIjoic3MiLCJwaG9uZSI6IjAxOS0zOTkyLTY0NDQiLCJiaXJ0aGRhdGUiOiIyMDIyLTEwLTE5IiwiZFJlZ051bWJlciI6InNzIiwic3ViIjoiNzAwNTU1MDAwMiJ9fSwic3ViIjoiZGlkOmV0aHI6MHhhNTQ1NDVhNGU0NWNmNWEyMjk0Mzg2OTVjNmJlYTIzYzVkMTQxNGM5IiwibmJmIjoxNjY2MTc2MTMzLCJpc3MiOiJkaWQ6ZXRocjoweGEzYmJmNTBhM2MzYTQxODA1MjEzMjVjYjk5ZWEzMDExNDJiMzYzNGUifQ.LrTCG_SPXE-qpicQvTlaw666cmDpsZEILPpCAVRMBbjB-Yp-GMY0arqTxgc0rTRD3XlXV57JhCkZKYBZ261Dxg"
      }
    }
  ]
}

이 인증 시스템에서 사용하는 VC 발행자 또는 검증자 목록을 구합니다.

Example

curl -X 'GET' \
  'https://test-auth.protx.io/v2/did/issuers' \
  -H 'accept: application/json'

Examples

curl -X 'GET' \
  'https://test-auth.protx.io/v2/did/verifiers' \
  -H 'accept: application/json'

Last updated