2017-11-30 4 views
0

WebApi Core 2.0のクライアントの一意の識別子を探しています
私はHttpContext.Connection.Idをテストしました。これはすべてのブラウザで同じです!Asp.Net WebApi Core 2.0でクライアントの一意の識別子を取得しますか?

[HttpGet] 
public IActionResult GetConnectionId() 
{ 
    return Ok(new 
    { 
     ConnectionId = HttpContext.Connection.Id 
    }); 
} 

はまた、私は、仮想マシンでテストし、それはAsp.Net WEBAPIコア2のクライアントの一意の識別子を取得するためにどのようにすべてのクライアントのために
同じでしたか?

+1

クライアント用のCookieを設定し、その後の要求でそのCookieを読み取ります。ここでは一意の識別子です。 – Evk

+0

Web apiのコンシューマーは、ソフトウェア、ロボット、...のようなクッキーが少ない –

+0

IDで渡してもらえますか? – john

答えて

2

「クライアントの一意の識別子」はありません。 HTTPはステートレスです。 HTTPプロトコルは、実際にのように設計されています。です。すべてのクライアントは、過去の通信に関係なく、任意のサーバーと通信できる必要があります。これにより、ロードバランシングやフェイルオーバーなどの概念が実現します。

セッション、クッキーなどのようなものは、HTTPプロトコルの上に階層化されています。プロトコルであり、サーバーとクライアント間の協調作業です。状態を達成するためには、クライアントとサーバーの両方がプロセスに参加する必要があります。特にCookieは、Google、Facebookなどの企業がサイト間でユーザーを追跡できるようにするものです。ただし、正しく指定したとおり、CookieはRESTベースのAPIと互換性がありません。

したがって、唯一のオプションは認証です。クライアントの認証を強制することで、クライアントのIDを正確に把握し、そのクライアントのアクティビティを追跡できます。他には何も足りません。 MACアドレスなどのクライアントの詳細にアクセスする方法はありません。なぜなら、クライアントが共有するものにアクセスすることができ、それはそれらのものではないからです。それがあっても、それは操作することができます。一度はIPアドレスが特定されていましたが、WAP、プロキシ、VPNなどのこの時代には、単一のIPを任意の数の固有クライアントで使用できました。また、IPアドレスも偽装することができます。そのため、IPでクライアントを識別できたとしても、そのクライアントを本当に扱っているとは限りません。

さまざまな認証方法があります。現在、JWT(JavaScript Web Token)が普及していますが、クライアント認証、証明書認証、OAuth、OpenIDなども簡単に使用できます。主な点は、何らかの形でクライアントに認証を強制することです。それだけで、あなたはクライアントを識別できます。

関連する問題