私の会社は、アプリケーションデータをクライアントに公開するAPIを作成しています。エンドポイントを完成させ、APIを保護したいと考えています。 APIはあらかじめ承認されたクライアントによってのみ使用されるため、匿名アクセスは必要ありません。私は、各クライアントを識別して認証するために生成するx.509証明書を使用できると言われました。私が各クライアントに発行する証明書にクライアントコードを埋め込むことを意味します(これは可能ですか?)。あなたはおそらく私がcertsでクライアントを認証することにほとんど経験がないと言うことができますが、これは堅実なアプローチですか?WebAPIのクライアント認証2
1
A
答えて
2
これは、クライアントの認証と承認に非常に「難しい」オプションです。非常に強力ですが、完全にPKI(公開鍵インフラストラクチャ)を管理する必要があり、クライアントにを安全に配布する必要があるため、実装に非常にコストがかかる可能性があります。
1))あなたが代わりにSSLを必要とし、あなたがしたい場合でも、全体的に(それを強制する必要があります。
public class RequireHttpsAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
if (actionContext.Request.RequestUri.Scheme != Uri.UriSchemeHttps)
{
actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
ReasonPhrase = "HTTPS Required"
};
}
else
{
base.OnAuthorization(actionContext);
}
}
}
public class ValuesController : ApiController
{
[RequireHttps]
public HttpResponseMessage Get() { ... }
}
2)あなたはapplication.host設定througtクライアント証明書を受け入れるようにIISを設定する必要がありますかIISマネージャコンソールを使用して:
<system.webServer>
<security>
<access sslFlags="Ssl, SslNegotiateCert" />
<!-- To require a client cert: -->
<!-- <access sslFlags="Ssl, SslRequireCert" /> -->
</security>
</system.webServer>
3)サーバー側では、要求メッセージにGetClientCertificateを呼び出すことにより、クライアント証明書を取得することができます。クライアント証明書がない場合、このメソッドはnullを返します。それ以外の場合は、X509Certificate2インスタンスを返します。このオブジェクトを使用して、発行者やサブジェクトなどの証明書から情報を取得します。次に、この情報を認証および/または承認に使用することができます。
X509Certificate2 cert = Request.GetClientCertificate();
string issuer = cert.Issuer;
string subject = cert.Subject;
(私はあなたがここにエキスを与えた)完全なreference用マイクワトソンのこの記事をチェックしてください。
これは確かなアプローチですか?
はい、それは念頭に置いてPKIの欠点として見ましたが、最終的には非常に強力なOAuth2認証を実装することができ、Exille Azure ADのために、外部プロバイダーに簡単に組み込むことができます。詳細については、thisの記事を参照してください。また、基本的なMVC/APIテンプレートから開始することもできます。
関連する問題
- 1. webapiとwinformクライアントのauth0ロール認証
- 2. .NET WebApi認証
- 3. Ionic 2によるWebAPI認証
- 4. webapiを使用したAngularJSクライアント側のルーティングとトークンの認証
- 5. Asp.Net WebApi OWIN認証
- 6. 認証と承認WEBAPI
- 7. WCF WebapiサイトでAndroidクライアントを認証しますか?
- 8. クロスドメインクッキー認証のトラブルWebApi ASP.NET
- 9. 2ウェイSSL認証のRubyクライアント
- 10. c#WebApi属性認証
- 11. Xamarinフォーム - Windows認証WebAPI
- 12. AngularjsとWebAPI - 認証と承認
- 13. Comクライアント認証
- 14. websocketクライアントの認証?
- 15. ジャージのクライアント認証
- 16. mvc4 webapiとコントローラのセキュリティ(認証と認証)
- 17. WebApi側のIdentityServerのユーザー認証
- 18. WebAPIを使用してサーバー側とクライアント側の認証を結合する
- 19. MVC/WebApiとWCF認証のソリューション
- 20. WindowsフォームからのMVC WebAPI認証
- 21. AngularJs -.net MVC WebApi認証の例
- 22. WebAPIのカスタムデータベースに対するトークン認証
- 23. WebAPI/WebアプリケーションでのHMAC認証アプローチ
- 24. クライアント、認証サーバ、ログアウト
- 25. 結合、クライアント認証
- 26. クライアントと認証サーバー
- 27. servicestackクライアント認証エンコードパスワード
- 28. OAuth2認証jsクライアント
- 29. 認証HTTP .NETクライアント
- 30. IdentityServer3クライアントからクライアントへの認証
ありがとうLuca、Mike Watsonの記事へのリンクはまさに私が必要としていたものでした。 APIを使用するクライアントが限られているため、新しいクライアント証明書の取り消しや発行にかかるオーバーヘッドを管理しなければならないため、独自の証明書を発行する予定です。 –