2016-10-29 8 views
9

C#REST APIはAngularJS Webアプリケーションから呼び出されます。私は、ユーザーを認証し、ユーザーが特定のWindowsグループの一部であることを確認することによってWeb APIを保護します。C#REST APIをPythonなどのスクリプト言語に安全に公開

これで、スクリプト(Python)からAPIを呼び出すことができます。これをどのように実装すればよいですか? jsonコールの一環として、ユーザー名とパスワードを渡すだけでいいですか?

+0

ウェブと同じ認証メカニズムを使用してみませんか? –

+0

私はクッキーを使用しており、ブラウザからそれを期待する別のサーバーからの承認を受けています。それは実現可能ではない –

+2

python httpライブラリでは処理できないものは何もありません。しかし、もっと簡単にしたいのであれば、HTTP基本認証とopenid/OAuthはAPI認証ではかなり一般的です –

答えて

3

現在使用しているのとまったく同じ認証方法を使用してください。ここで

は、Python(未テスト)を使用して、脱塩基の例である:

from requests.auth import HTTPBasicAuth 
s = requests.Session() 

# Make the initial authentication request from a session object 
s.get('https://omg.wtf/user', auth=HTTPBasicAuth('user', 'pass')) 

# All subsequent requests from that session will include any cookies set in the initial response 
r = s.get('http://omg.wtf/911') 
print(r.text) 
+0

pythonスクリプトにリダイレクトしてクッキーを設定することは可能ですか? –

+0

リダイレクトはどういう意味ですか? Cookieはs = requests.Session()に格納されます。 あなたはいつでもcookie/sessionを使って新しいリクエストを作成できます。 –

+0

@ SeanThorburnの元のコードを調整して、セッションオブジェクトからも最初の要求が行われるようにします。そのオブジェクトは、初期応答で設定されたすべてのCookieを記憶し、後続の要求でそれらのCookie値を送信します。 –

4

あなたは簡単にPythonでヘッダを増やすことができる場合、私はあなたがトークン認証を使用することを示唆しています。マイクロソフトはこのタイプの認証を直接提供するのではなく、OWINプロジェクトを通じて提供しています。使用するのは難しいことではありませんが、どのようなものが最初に働くのかを知る必要があります。非常に良い包括的なチュートリアルhereがあります。

基本的には、ユーザー名/パスワードを入力することで、一定期間有効なトークンを取得できます。このトークンは暗号化/署名されています。つまり、バックエンドが信頼するということは、各リクエストでユーザー名とパスワードを検証する必要はありません(これは高価です)。次に、このトークンをヘッダーに追加する必要があります。Authorization bearer tokenなど、各リクエストに似たものがあります。あるいは、もしあなたが好きであれば、逆の一貫性を維持するためにクッキーにトークンを持つことができると思います。

Angularでも同様のメカニズムを使用することをお勧めします。インターセプタを簡単に追加して、クッキーやCSRFの潜在的な問題を回避できるからです。

関連する問題