2016-11-04 11 views
3

社内向けのイントラネット専用のREST APIサーバーを開発しているうちに、認証に関する問題について完全に自分自身を混乱させるようになりました。IIS/WCFを使用せずにREST API呼び出しでWindowsユーザーを認証するにはどうすればよいですか?

私が持っている

  • A REST Webサーバのユーザによって実行、サーバーを照会することができますWindowsサービス
  • AC#クライアントとして動作して、自己ホスト型ナンシー使用して、C#で実装当社で

は私がないを持っています:

    01別にWindowsで実行されているすべてのアプリケーションが正常に
  • を持っているものから私たちのActive Directoryおよび/またはドメインコントローラへのアクセスの
  • いかなる形態、ADの設定や構成
  • Active Directoryフェデレーションサービス(ADFS)に影響する任意の方法(I 考えてください

    • 方法について:私達はちょうど私がをしたい

    ソフトウェアランドスケープの状態)

  • のAzure Active Directoryの上のいくつかの視点(AAD)を得、Windows 7とOffice 2010の使用します当社のユーザーがリクエストを行ったことを認証するサーバー
    • クライアントがリクエストごとに追加の認証データを送信する必要がある場合は、それはないは、任意の形式で、ユーザーのパスワードが含まれてい

私ははしたくないん:

  • は(私のサーバーは、最小構成でなければならない任意の追加のソフトウェアを設定する必要がありますし、メンテナンスのため、一般のユーザーがインストールして実行できます)
  • IISサーバーのインストール/構成/メンテナンス(上記を参照)
  • ユーザーのパスワードを何らかの方法で処理する(会社の方針と常識)
  • (私は真正性を検証する必要があります)要求の)
  • 自分のユーザーアカウントデータベースを実装します。我々はすでに、自分のユーザー名/パスワードの組み合わせを必要とする半ダースのサービスを持って、私はどのようにuse Windows authentication with IIS、またはどのようにAzure Active Directory (AAD) with Nancyを使用する方法を示してさらに別の1

私が読んだ記事を追加する必要はありません。ここの他の質問は、すでにauthenticate username/password combinations against the Active Directoryに私に知らされています。しかし、これらのどれも私の要求のすべてを満たしておらず、(AAD/ADFSのような)私自身が満たすことができない要件もありません。

Kerberos/SSPIが私の望むものかもしれませんが、C#で作業するにはかなり複雑で複雑なようです。可能であれば、私はこのルートに行く必要がありますが、私は実際には最小限の作業例から恩恵を受けることができます(受け入れられた答えはC#実装/ラッパーを提供しますが、サンプルプロジェクトも含みますが、それの尾)。

たぶん私は素朴ですが、私は画像ソリューションを可能にすると、次の線に沿って何かである:

  1. は、クライアントが何らかの形のためのサービス(?AD、ドメインコントローラを、...)照会します現在ログインしているユーザの認証情報を使用して認証トークンを送信する
  2. 認証が必要な要求の一部としてトークンがユーザ名とともにサーバに送信されます
  3. サーバはトークンを抽出し、同じサービス(AD、ドメインコントローラ、...)は、トークンが正当で有効で、かつクエストでユーザに属しているかどうかon

これはまったく可能ですか?理想的には、私のプロジェクトにプラグインできる準備が整ったライブラリのある種のもの(私は到達しています、私は知っています)?

答えて

1

これは、ステートレス認証とJwtで行うことができます。 "/ auth"(例)にユーザ名とパスワードを送り、 "/ auth"はADを検索してユーザが存在するかどうかを検証し、読み込んだユーザの名前でJwtトークンを作成します。要求を行うと、Jwtトークンのみが送信され、Nancyはトークンを検証します。

+0

この実装が役立ちます。 https://github.com/apedroed88/NancyJwtAutenticationv2 –

+0

これは実際に私がやったことなので、私はそれを受け入れます。しかし、私の元の質問の意図は、何とか私のためにこれを行うように広告を説得する方法があるかどうかを調べることでした。私は「いいえ」と答えることができます:) – jcb

関連する問題