광고 시스템 작업을 하던 중 제가 연결한 대부분의 플랫폼의 광고 시스템이 인터페이스 인증을 위해 토큰을 사용한다는 사실을 발견했는데, 이 토큰은 변경되지 않고 광고주가 제공한 것이라고 할 수 있습니다. 인터페이스이지만 이것은 악의적인 호출을 방지하고 채널의 신원을 확인할 수 있는 높은 보안 요구 사항이 없는 인터페이스입니다.
작년에 저자는 내부 서비스 개방형 인터페이스 및 타사 시스템 호출에 대한 통합 인증 관리를 제공하는 API 통합 인증 플랫폼을 작성했습니다. 관리 인터페이스 인증을 용이하게 하는 것 외에 다른 목적은 없지만 배포하는 데 비용이 듭니다. . 이것은 아마도 내가 해본 프로젝트 중 가장 무의미한 프로젝트일 것입니다.
오늘 소개된 API 인증 메커니즘은 더 널리 사용되는 API 인터페이스 인증 메커니즘일 수도 있습니다. 작성자가 WeChat 결제 기능을 사용할 때 WeChat에서 제공하는 결제 인터페이스도 서명이라는 방법을 사용했던 것으로 기억합니다. 장점: 간단하고 성능에 영향을 주지 않으며 추가 비용이 없습니다.
이 인증 방법의 구현 논리는 인증자가 각 액세스 플랫폼에 대해 고유한 ID(키)와 독립 키를 설정한다는 것입니다. 이는 실제로 계정 비밀번호와 동일합니다. 액세스하는 시스템은 요청을 시작할 때마다 요청 헤더에 세 가지 매개변수, 즉 ID(키), 요청의 타임스탬프, 승인 시스템이 요청을 수신할 때 서명을 확인해야 합니다. 통과해야만 공개됩니다.
서명을 검증하는 과정은 요청 헤더에서 키와 타임스탬프를 얻은 다음, 키를 기반으로 동일한 알고리즘을 사용하여 서명을 생성하고(발신자와 승인자는 동일한 서명 알고리즘을 사용함) 마지막으로 서명을 비교하는 것입니다. 동일한지 확인하기 위해 요청 헤더에서 가져옵니다. 그렇다면 확인에 성공한 것이고, 그렇지 않으면 확인에 실패합니다.
서명 알고리즘 기반 인증 방식의 구현 과정은 다음과 같습니다.
인증자:
1 서명 알고리즘을 정의하고, 접속자에게 서명 생성 알고리즘을 제공하고, 접속자에 대한 키와 ID를 생성합니다.
2. 프로젝트에서 서명 확인이 필요한 인터페이스를 가로채고, 요청 헤더에서 타임스탬프와 ID를 얻고, 키와 서명 알고리즘을 기반으로 서명을 생성하고, 생성된 서명을 3. 그렇지 않으면 요청을 거부합니다.
3. 적시성 확인을 요청하고 요청이 다음 범위 내에 있는 경우 현재 시스템 타임스탬프와 비교합니다. 유효한 시간 범위이면 요청을 해제하고, 그렇지 않으면 거부하고 서명이 만료되었다고 응답합니다.
접속 당사자:
1. 승인된 당사자로부터 도킹 문서를 획득하고 승인된 당사자에게 키와 ID를 요청합니다.
2. 문서에서 제공하는 서명 생성 알고리즘에 따라 서명 방법을 캡슐화합니다.
3. 요청 시 ID, 현재 타임스탬프 및 서명이 요청 헤더에 기록됩니다.
서명 생성 알고리즘은 사용자 정의할 수 있습니다. 예를 들어 ID(키), 타임스탬프(타임스탬프) 및 키를 함께 접합한 후 MD5 알고리즘과 같이 되돌릴 수 없는 알고리즘을 사용하여 문자열을 암호화하여 서명을 생성합니다. 규칙이 복잡할수록 해독하기가 더 어려워집니다.
서명에 타임스탬프를 추가하면 어떤 이점이 있나요?
첫 번째는 서명에 적시성을 추가하는 것입니다. 인증 시스템은 요청 타임스탬프를 사용하여 현재 타임스탬프와 비교하여 서명의 유효 시간을 1초 또는 5초로 제한할 수 있습니다. 단, 양측의 시스템 시간이 정확해야 합니다.
두 번째는 보안입니다. 해커가 요청을 수정한 다음 요청을 시작하면 시스템이 변조된 요청을 수신할 때 서명의 유효 기간이 길어집니다. 통과했다. 요청 헤더에 전달된 타임스탬프를 변경하면 요청 승인 시스템이 요청 헤더에 전달된 서명과 다른 서명을 생성하므로 요청은 여전히 유효하지 않습니다.
키를 모르면 권한을 부여하는 당사자(육계)의 서명 규칙을 모르면 유효한 서명을 생성할 수 없습니다. 비대칭 암호화 알고리즘을 사용하여 서명된 파일을 사용하면 무차별 대입을 통해 키를 해독하는 것이 거의 불가능합니다.
그럼 시간 문자열 형식을 지정하는 대신 타임스탬프를 사용하는 이유는 무엇입니까?
이는 시간대 호환성 때문일 수 있습니다. 서로 다른 컴퓨터실이 서로 다른 시간대에 있는 경우 시간은 다르지만 타임스탬프는 동일합니다.
이 인증 방법의 보안을 극대화하려면 먼저 서명 생성 규칙이 충분히 복잡해야 하며, 서명의 암호화 알고리즘은 Base64와 같은 알고리즘을 절대 사용할 수 없어야 합니다. 충분히 길고 복잡해야 합니다. 이렇게 하면 서명 생성 규칙을 알고 있더라도 무차별 대입을 통해 키를 해독하는 것이 불가능합니다.
서명 규칙은 암호화 전에 서명 문자열을 생성하는 규칙을 의미합니다. 예를 들어 규칙에는 키, 비밀 키, 타임스탬프가 포함되며 여기서 키와 키는 두 번 나타납니다. 키는 "app", 비밀키는 "123", 타임스탬프는 "11111111111111", 스플라이싱으로 생성된 사전 암호화된 서명은 "app1231111111111111app123", 마지막으로 스플라이싱된 문자열이 암호화 알고리즘을 통해 암호화된다고 가정하자. 최종 서명을 생성합니다.
인터페이스별로 시그니처 로직을 작성하는 게 번거롭지 않나요?
아니요. 승인자의 경우 서명 확인 논리는 호출자에 대한 필터 또는 인터셉터를 통해 완료될 수 있으며, 다양한 프레임워크를 사용하는 다양한 방법이 있지만 항상 서명 논리를 한 번만 작성하는 방법을 찾을 수 있습니다.
위 내용은 서명 알고리즘 기반의 간단하고 안전한 API 인증 메커니즘은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!