swift - jwt 분석

1775 단어
Json web token (JWT) 은 네트워크 응용 환경 에서 성명 을 전달 하기 위해 실 행 된 JSON 기반 의 개방 기준 (RFC 7519) 입 니 다. 이 token 은 치밀 하고 안전 하 며 분포 식 사이트 의 단일 로그 인 (SSO) 에 특히 적 용 됩 니 다.장면. JWT 의 성명 은 일반적으로 신분 제공 자 와 서비스 제공 자 간 에 인 증 된 사용자 신분 정 보 를 전달 하여 자원 서버 에서 자원 을 얻 을 수 있 도록 하고 다른 업무 논리 에 필요 한 성명 정 보 를 추가 할 수 있 습 니 다. 이 token 은 인증 에 직접 사용 할 수도 있 고 암호 화 될 수도 있 습 니 다.
현재 로그 인 에서 token 인증 사용 자 를 사용 하 는 경우 가 빈번 합 니 다. Token 의 해석 규칙 은 JWT 의 base 64 방식 을 사용 하 는 경우 가 많 습 니 다. 본 고 는 swift 에서 jwt 를 분석 하 는 방식 을 제공 합 니 다. 
extension String {
    func jwtDecode()->[String: Any]{ 
        /**     */
        let segments = components(separatedBy: ".")
        /**       Payload    (    key       )*/
        var base64String = segments[1]
        /** base64  */
        let requiredLength =(4 * ceil((Float)(base64String.count)/4.0))
        let nbrPaddings = Int(requiredLength)- base64String.count
        if nbrPaddings > 0 { 
            let pading = "".padding(toLength: nbrPaddings,withPad: "=",startingAt: 0)
            base64String = base64String + pading
        }
        base64String = base64String.replacingOccurrences(of: "-",with: "+")
        base64String = base64String.replacingOccurrences(of: "_",with: "/")
        let decodeData = Data(base64Encoded: base64String,options: Data.Base64DecodingOptions.ignoreUnknownCharacters)
        let decodeString = String.init(data: decodeData!,encoding: String.Encoding.utf8)
        /**    */
        let jsonDict:[String : Any]? = try? JSONSerialization.jsonObject(with:(decodeString?.data(using: String.Encoding.utf8))!,options: JSONSerialization.ReadingOptions.mutableContainers)as![String : Any]
        /**  jwt */ 
        return jsonDict ?? [:]
    }
}

좋은 웹페이지 즐겨찾기