0

ユーザーアクセス管理プロバイダーによって生成された一意のトークンに基づいてユーザーを認証するための API を作成する必要があります。

ユーザー名とパスワードでユーザーの認証を管理するphpで開発されたアプリケーションがあるというプロセスです。その php アプリケーションには、他の .net および Java アプリケーションへのリンクがあります。リンクがクリックされると、サード パーティのユーザー アクセス管理に接続され、クエリ文字列パラメーターとして .net アプリケーションに渡される GUID のような一意のトークンが与えられます。私たちの .net アプリケーションは 2008 年に開発されたもので、サードパーティのユーザー管理アプリケーションに対して一意のトークンを認証するために vb スクリプトを使用しています。

私は多くの調査を行い、asp.net MVC4 Web Api を作成して vb スクリプトを取り除き、拡張可能にしようとしていました。私のアプローチが正しいかどうか、または以下の要件を達成するために何を使用する必要があるかを教えてください

  • Api は、メインの PHP アプリケーションで提供される任意の数のアプリケーション リンクを提供できる必要があります。
  • トークンを認証するためにこの API を使用する他のアプリケーションは、Java と .net にあります。
  • 同じことを達成するためにmvc4 Web APIを選択するのは正しいですか
  • はいの場合、どのタイプの認証を使用する必要がありますか (基本、フォームなど)
  • 私のシナリオに関係のない多くの例を見つけたので、見るべきサンプルコードはありますか?

これらの Java および .net アプリケーションは、php アプリケーションから渡された一意のトークンに基づいて認証する必要があります。

4

3 に答える 3

0

メッセージ ハンドラーを使用して currentprincipal を設定できます。たとえば、次のようになります。

public class TokenAuthMessageHandler : DelegatingHandler
{
    public TokenAssembler<Token> TokenAssembler { get; set; }
    const string SSOTOKEN = "token";

    protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(
        HttpRequestMessage request,
        CancellationToken cancellationToken)
    {
        Token token;
        IEnumerable<string> headers;
        if (request.Headers.TryGetValues(SSOTOKEN, out headers))
        {
            token = TokenAssembler.Decrypt(headers.First());
        }
        else
        {
            var qs = HttpUtility.ParseQueryString(request.RequestUri.Query);
            var tokenstr = qs[SSOTOKEN];
            if (!string.IsNullOrEmpty(tokenstr))
            {
                token = TokenAssembler.Decrypt(tokenstr);
            }
        }

        if (token != null) 
        {
           var principal = new GenericPrincipal(new GenericIdentity(Username), null);
           Thread.CurrentPrincipal = principal;
           HttpContext.Current.User = principal;
        }
        return base.SendAsync(request, cancellationToken)
           .ContinueWith(task =>
           {
               var response = task.Result;

               if (response.StatusCode == HttpStatusCode.Unauthorized
                   && !response.Headers.Contains(BasicAuthResponseHeader))
               {
                   // redirect to some log in page?
               }
               return response;
           });
    }

次のように、webapiconfig にメッセージ ハンドラーを登録します。

config.MessageHandlers.Add(new TokenAuthMessageHandler() { TokenAssembler = MyTokenAssembler });
于 2013-10-10T06:35:19.883 に答える
0

このリンクは非常にシンプルで、何を使用するかを決定するのに役立ちます。私は彼がそれを非常に簡単な方法で言及したと思います.

この種の説明をこの 3 ~ 4 日間探していて、ようやく入手できました。OpenID と OAuth について言及されている実際の実装はありませんが、読む価値があります。

http://jamiekurtz.com/2013/01/14/asp-net-web-api-security-basics/

于 2013-10-11T10:37:35.767 に答える
0

あなたの要求の音から、Thinktecture の Identity Serverはあなたのニーズに非常に適しているようです。リンクに移動すると、トークンを認証するためのハブとして機能する方法の完全な説明が提供されます。これがあなたの質問のチェックリストに答えると確信しています!

于 2013-10-09T14:40:20.847 に答える