認可を理解する為にpythonで実装してみました〜

この前、認可と認証についての記事を読みました〜

よくわかる認証と認可 | DevelopersIO

認証は「むむ、あやしいやつ?…ではないな」っていう感じの確認ですね~
認可は…ちょっとわからなかったのですが、何でも、切符みたいなものなんだとか。

わからなかったら、とりあえず作ってみる!
というわけで電車の中で30分くらい揺られながら作ったのがこちらになります~

ticket.py

import uuid

class Ticket():
    def __init__(self):
        self.ticket_holder = []
        
    def issue_a_ticket(self):
        ticket = uuid.uuid4()
        self.ticket_holder.append(ticket)
        return ticket
        
    def exact_ticket(self,your_ticket):
        if your_ticket in self.ticket_holder:
            print('Ok, that ticket is real.')
            self._destruct_ticket(your_ticket)
        else:
            print('what the hell! This ticket is fake!')
    
    def _destruct_ticket(self,target_ticket):
        self.ticket_holder.remove(target_ticket)
            

if __name__ == '__main__':
    app = Ticket()
    get_ticket = app.issue_a_ticket()
    print(get_ticket)
    
    # success!
    app.exact_ticket(get_ticket)
    
    # failed 1
    app.exact_ticket('bad_ticket')
    
    # failed 2, you can entry only once.
    app.exact_ticket(get_ticket)

 実行結果

$ python ticket.py
8d5e2870-92c3-41f6-9502-5d152bfbf315 <-ここは毎回変わります~
Ok, that ticket is real.
what the hell! This ticket is fake!
what the hell! This ticket is fake!

チケット発行したらそのチケットを使って、
ある関数を実行する って感じですね〜

この時渡されるチケットが正しいものじゃないと、
このチケットはよろしくない旨のメッセージが出ます~

 今回はメッセージを表示するだけですけど、なんかに使えそうな感じはしますね~

ちなみに、今回作ったチケットは一回限りのチケットになりますので、
2回目以降は正しいものでも偽物扱いされます〜

 

因みに、この入手したチケット、
なんと、別の方に渡す事も出来るのです〜

cacapon.py

from ticket import Ticket

app = Ticket()

class Cacapon():
    def __init__(self):
        self.haveticket = ''

    def get_ticket(self,your_ticket):
        self.haveticket = your_ticket

    def use_ticket(self):
        app.exact_ticket(self.haveticket)

if __name__ == '__main__':
    any_have_ticket = app.issue_a_ticket()

    cacapon = Cacapon()
    cacapon.get_ticket(any_have_ticket)
    cacapon.use_ticket()

 実行結果

python cacapon.py
Ok, that ticket is real.

anyさんが発行したチケットを
cacaponが使えてるのが分かるかと思います〜
これが、認可ってやつですかね?

こうやって作ってみると、何となくわかる気もしてきます~♪ これが認可ってやつかなぁいう感触は得られました♪

これの発展形としては
「無条件で発行しているところに制限を加える(認証機能の追加)」とか
「1日乗車券みたいに、失効タイミングを変更してみる」とか
…が思いつきます~もっと色々使えそうですね♪