Code Monkey home page Code Monkey logo

sejong-univ-auth's Introduction

sejong-univ-auth Python versions License Release

sejong-univ-auth image
Sejong University Member Account Authentication

세종대학교 구성원인지 확인하기 위한 간편한 인증 라이브러리입니다.

Python이라면 아래와 같은 방법으로 쉽게 구현해보세요!

혹시 다른 언어를 사용하시나요? 그렇다면 저희들이 직접 개발한 REST API를 사용해보세요!


Easy to install

Pip: pip install sejong-univ-auth

Direct:

  • git clone https://github.com/iml1111/sejong-univ-auth
  • python setup.py install

Easy to use

>>> from sejong_univ_auth import auth
>>> result = auth(id='16011089', password='<my-password>')
>>> result.is_auth
True

Usage

세종대학교에는 다양한 웹 서비스가 있고, 하나의 포탈 멤버 계정을 통해 인증을 수행합니다.

해당 라이브러리의 동작 방식은 여러 웹 서비스의 인증 동작 구조를 직접 재현하여 대신해서 로그인을 수행해본 후, 해당 결과를 프로그래밍적으로 활용할 수 있도록 돕습니다.

sejong_univ_auth를 사용하기 위한 endpoint 함수는 아래와 같습니다.

def auth(id: str, password: str, methods: Authenticator)
# id, password: 세종대학교 포탈에 로그인하기 위한 계정 정보입니다.
# methods: 어떠한 인증 방식으로 인증을 시도할지 결정합니다. (default=Manual)

Methods

현재 사용가능한 인증 방식(Method)은 아래와 같습니다.

from sejong_univ_auth import (
    Manual,
    PortalSSOToken,
    DosejongSession,
    MoodlerSession,
    ClassicSession
)
  • PortalSSOToken

    • 세종대학교 포탈 사이트의 인증 방식입니다.
  • DosejongSession

    • dosejong 사이트의 세션 인증 방식입니다.
    • 이름, 학과를 추가로 조회할 수 있습니다.
  • ClassicSession

    • 대양휴머니티칼리지 사이트의 세션 인증 방식입니다.
    • 함께 조회되는 추가 정보는 다음과 같습니다.
      • 이름
      • 학과
      • 학년
      • 재학/휴학/수료 상태
      • 고전 독서 인증 현황
  • MoodlerSession

    • SJULMS 사이트의 세션 인증 방식입니다.
    • 이름, 학과를 추가로 조회할 수 있습니다.
  • Manual (default)

    • 현재 구현된 모든 메소드를 평균 실행 속도가 빠른 순서대로 수행합니다.
    • 인증 성공 및 id/pw 불일치로 인한 인증 실패가 반환될 때까지 순차적으로 실행합니다.

메소드를 직접 지정하는 경우, 아래와 같이 사용할 수 있습니다.

>>> from sejong_univ_auth import PortalSSOToken, DosejongSession, auth
>>> auth(id='<your-id>', password='<your-pw>', methods=PortalSSOToken)
>>> auth(id='<your-id>', password='<your-pw>', methods=DosejongSession)
...
# 복수의 Authenticator를 순차적으로 수행할 경우
>>> auth(id='<your-id>', password='<your-pw>', methods=[PortalSSOToken, DosejongSession])

복수의 Authenticator를 list(혹은 tuple) 형태로 주게 될 경우, 순차적으로 메소드를 수행합니다.

만약 현재의 메소드에서 현재 인증이 불가능한(Internel Sever Error 등의) 상황일 경우, 바로 다음 메소드로 시프트하여 인증을 진행합니다.

AuthResponse

인증의 결과는 Nametuple의 형태로 반환됩니다.

AuthResponse(
	success=True,
	is_auth=True,
	status_code=200,
	code='success',
	body={
		'name': '신희재',
		'major': '컴퓨터공학과'
	},
	authenticator='DosejongSession'
)
  • success: 인증 서버 정상 동작 여부

    • 해당 인증 절차에 대하여 서버는 정상적인 결과를 반환하였습니다.
    • Value: True / False
  • is_auth: 인증 성공 여부

    • id/pw가 정확하더라도 서버의 상태 이상 및 인증 포맷이 갱신되어 라이브러리의 방식과 상이할 경우 인증 성공을 반드시 보장할 수 없습니다.
    • 인증 결과를 알 수 없을 경우, None이 반환됩니다.
    • Value: True / False / None
  • status_code: 인증 서버의 HTTP status code

    • Value: int
  • code: Authenticator 반환 코드

    • 인증이 성공할 경우, 'success'로 통일합니다.
    • 인증이 실패 및 알 수 없을 경우, 각각의 분기에 맞는 코드 값을 반환합니다.
    • Value: string
  • body: 메타데이터

    • 인증 결과에 관련된 메타데이터를 포함합니다.
      • 인증 실패시의 보다 정확한 실패 사유
      • 이름/학번/학년/재학 상태 등의 추가 정보
    • Value: dict
  • authenticator: 해당 인증에 사용된 Authenticator 클래스


Sejong Auth API

Java, Node 등 다른 언어를 사용중이신 학우분들을 위해 저희들이 개발한 REST API를 사용하실 수 있습니다.

  • 단, 해당 API의 경우, 지속적인 지원을 보장할 수 없습니다.

Request

method의 경우, 기존에 사용가능한 메소드를 "Manual", "DosejongSession"과 같은 형식으로 그대로 입력해주시면 됩니다. 복수의 메소드에 대한 순차적인 호출은 현재 지원되지 않습니다.

POST https://auth.imsejong.com/auth?method=<사용하고자 하는 메소드> HTTP/1.1
Host: auth.imsejong.com
{
    "id": "<학번>",
    "pw": "<비밀번호>"
}

Response

{
    "msg": "success",
    "result": {
        "authenticator": "DosejongSession",
        "body": {
            "major": "컴퓨터공학과",
            "name": "신희재"
        },
        "code": "success",
        "is_auth": true,
        "status_code": 200,
        "success": true
    },
    "version": "0.3.4"
}

Contributors

컨트리뷰트를 원하신다면 가이드라인을 참고해주세요! 감사합니다! 😀



References

sejong-univ-auth's People

Contributors

altmshfkgudtjr avatar iml1111 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

altmshfkgudtjr

sejong-univ-auth's Issues

구현 방식에 대한 문의드립니다.

안녕하세요. 학교 인증 라이브러리를 찾다가 여기까지 왔습니다. 좋은 라이브러리 감사합니다.
다름 아니라, 구현 방식이 궁금해서 코드를 읽던 중 대한 질문이 있어서 문의 드립니다.


질문 1

아래 코드에서 p.tc은 어떤 요소인가요? 직접 사이트에 로그인 했을 때, p.tc 라는 요소를 못 찾았습니다.

대양휴머니티컬리지 인증 관련 코드를 읽고 제가 파악한 바는 다음과 같습니다.

  1. http://classic.sejong.ac.kr/ 로 접속
  2. https://classic.sejong.ac.kr/userLogin.do 로 로그인 시도
  3. https://classic.sejong.ac.kr/userCertStatus.do 로 사용자 정보 요청

질문 2

https://classic.sejong.ac.kr/userLogin.do 에 직접 요청 보내는 방식에 대해서 어떻게 생각하시는지 궁금합니다.


Sejong Auth API - Request 요청 방법

Is your feature request related to a problem? Please describe.
어떤 문제로부터 해당 기능을 요청했나요?

Sejong Auth API에서 Request 방법에
POST https://auth.imsejong.com/auth HTTP/1.1
HOST : auth.imsejong.com?method=<사용하고자 하는 메소드>
로 적혀 있습니다.
실제로 Request 할 URL의 경우 auth.imsejong.com/auth?method=<사용하고자 하는 메소드> 인데
auth.imsejong.com?method=<사용하고자 하는 메소드>/auth 이런식으로 오해할 수 있을 것 같습니다.

Describe the solution you'd like
당신이 생각하는 해결방법을 설명해주세요.

Readme.md 부분에 해당 설명을
POST https://auth.imsejong.com/auth HTTP/1.1
HOST : auth.imsejong.com/auth?method=<사용하고자 하는 메소드>
이런식으로 변경하면 좋을 것 같습니다.

Additional context
추가적으로 작성하고 싶은 내용을 작성해주세요.

api사용관련 문의

안녕하세요. 좋은 api 제공 감사드립니다.
다름이 아니라 postman으로 해당 api로 요청을 보내면 성공은 하지만 body에 이름,학과가 오지 않아 api가 맞게 동작하는것인지 여쭤보고자 issue남깁니다

ClassicSession 기능 개선

  • 참고 #1
  • 보다 정학하게 ID/PW 오입력 여부를 판단할 수 있도록 수정.
  • 휴머니티측 파라미터 구조가 변경됨에 따른 인증 실패를 탐지할 수 있도록 수정
  • 재외국민/편입생/계약학과 학생일 경우, 예외처리 추가

Sejong-Univ-Auth REST API 서버 관련 문의

Is your feature request related to a problem? Please describe.
어떤 문제로부터 해당 기능을 요청했나요?

REST API 서버 유지에 관련하여 비용 문제 때문에 어려움이 있지 않을까 하는 생각이 들어 문의했습니다.

Describe the solution you'd like
당신이 생각하는 해결방법을 설명해주세요.

곧 총학 선거가 있을 예정입니다.

총학이 선발 된 이후에 해당 서비스를 총학 서버를 이용해서 제공하면 비용 문제를 해결하고 지속적인 서비스를 제공할 수 있을 것 같습니다.

학교의 여러 서비스 개발과 차후 학생들의 다양한 개발을 위해서 도움이 될 서비스 같아 서비스를 이전하면 좋을 것 같습니다.

이번 총학 선거에 나가는 한 후보와 이야기를 나눈 내용이기에 현재까지는 확실하게 이전할 수 있다고는 말할 수 없을 것 같습니다.

해당 방안에 대해서 어떻게 생각하시는 지 답글 남겨주시면 감사합니다.

Additional context
추가적으로 작성하고 싶은 내용을 작성해주세요.

Python 상위 버전에 따른 type hint Error

현재의 type hint 방식은 3.9 이상의 버전에 사용가능한 것으로 추측됨.

하위 버전을 모두 지원하는 힌팅 방법을 찾을때까지 문제가 발생한 부분의 typing 코드 제거

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.