2017-03-19 7 views
0

を使用する際AuthenticationManagerクラス、ForbidAsync()ChallengeAsync()上の2つの方法がありますが、私は私のコントローラでHttpContext.Authentication.ForbidAsyncを実行するか、またはタイプForbidResultの結果を返すことができることを知って、それは同じ効果を持ち、同じことがありますChallengeAsyncについてはtrueです。 、私はどのように、なぜそれらを使用するために思っていたこの時点でそれらの使用または任意の例に多くのドキュメントがありませんForbidAsync対ChallengeAsyncなぜ、彼らに

public ForbidResult ForbidResult() 
{ 
    return Forbid(); 
} 

public ChallengeResult ChallengeResult() 
{ 
    return Challenge(); 
} 

ForbidAsync Vs ChallengeAsync :しかし、彼らが同じ結果を生み出すようです。

答えて

2

現在の訪問者がログインしていないが、認証されたユーザーを必要とする操作にアクセスしようとしている場合には、チャレンジの結果を一般的に使用する必要があります。資格情報の入力を求めるプロンプトが表示されます。また、認証されたユーザー、アクションの承認を受けていないユーザー、およびより高い特権の資格情報を求めるプロンプトを表示する場所にも使用できます。

現在の訪問者がシステム内のユーザーとしてログインしているが、自分のアカウントに実行権限がない操作にアクセスしようとしている場合は、禁止する必要があります。

Identityによって追加された標準ASP.NETコアCookieAuthenticationでは、デフォルトのパスが各ケースを処理するように設定され、ユーザーはリダイレクトされます。デフォルトでは

は... アクセスは拒否されました - /アカウントにリダイレクトする、すなわち禁じルックスを/非認証 をアクセス拒否 - すなわち挑戦は禁じられ、リダイレクトなしで/アカウント/ログイン

にリダイレクトするように見える403のステータスコードを返します。チャレンジは401を返します。

デフォルトのオプションで指定されているようにリダイレクトが行われているため、代わりに302のステータスコードが表示されます。

私はこれを覚えていませんが、これは私の一般的な理解です。