Swagger(Open API)における基本認証ネット5


swaggerまたはopenapiはRESTful API記述の標準と仕様を記述するために使用されます.REST APIを作成するために、これらの仕様は大きな試みです、そして、これらの仕様は簡単にRESTfulサービスを理解して、機能と組織の簡単なドキュメンテーションと詳細を提供するのに用いられる利点を提供します.

OpenAPIとは


OpenAPI仕様は、HTTP APIを記述するための業界で使用され、APIを複雑なビジネスプロセスやサードパーティと統合するために使用される標準です.OpenAPIは、すべてのクラウドプロバイダとAPIレジストリによってサポートされています.OpenAPI仕様はREST APIのフォーマットを記述するために使用されます.
OpenAPIは次のように説明します.
  • OpenAPI記述終点(従業員)と終点(取得/従業員、ポスト/従業員)の操作
  • OpenAPIは、各々の操作
  • のための入力と出力パラメタを記述するのに用いられます
  • OpenAPIは、認証方法
  • を記述するために使用されます
  • OpenAPIは、用語、ライセンス、連絡先、およびその他の情報を記述するために使用されます.
  • OpenAPIの必要性


    OpenAPIは独自の構造を記述するために使用されます.書かれた後、OpenAPIの仕様とswaggerツールAPIは以下の方法でドライブできます.

  • デザインの最初の:Swagger Codegenを使用して、ユーザーはAPIを提供するサーバーロジックを実装した後スタブを生成することができます-あなたのAPIを使用する準備ができています.

  • Swagger Codegenを使用します:Swagger Codegenは、40の言語でAPIのクライアントライブラリを生成するために使用されます.

  • Swagger UIを使用します:Swagger UIは、ブラウザで直接APIを呼び出すために使用される対話型APIドキュメントをレンダリングするために使用されます.
  • APIを接続するための仕様を使用します.たとえば、APIのSoapUIへのインポート指定.
  • どのようなswaggerですか?


    Swaggerは、オープンソースツールのセットと一緒に使用され、設計、ビルド、ドキュメントのためのOpenAPI仕様の周りを構築し、残りのAPIを消費する.
    Swaggerには、次のツールが含まれています.
  • swaggerエディタ- swaggerエディタは、ブラウザ
  • のためにOpenAPI仕様を書くのに使用されます
  • swagger UI - swagger UIは対話型APIドキュメントをレンダリングするために使用されます.
  • Swagger Codegen - Swagger CodegenはOpenAPI仕様からのサーバースタブとクライアントライブラリの生成に使用されます.
  • OpenAPI仕様またはSwaggerは以下のタイプを定義します
    API認証
  • 基本的な認証
  • OAuth 2認証
  • JWTベアラ認証
  • 基本認証


    基本認証は、アクセス制限リソースの単純なユーザ名とパスワードを使用するHTTPプロトコルに組み込まれている非常に単純な認証方式です.BS 64エンコーディングを使用して、ユーザ名とパスワードは標準的な「認可」に翻訳されます.この計画は、彼らの「LAN」基盤の内部で組織によって使われます.

    提言
    BS 64エンコーディングなどの他のセキュリティメカニズムを使用するには、BS 64エンコーディングを簡単にデコードできます.
    続きを読む:What’s New In .net Productivity?

    認証


    OAuth 2認証は、サーバー上のユーザーデータへのアクセスを制限するために使用される認証プロトコルです.Github、Google、およびFacebook APIで使用されるOAuth 2認証.OAudio 2認証はフローに使用されます.そして、それは、ユーザがリソースOAus認証のために資格を共有することなく、クライアントから保護されたコンテンツを共有するのを許します.

    ベアー認証


    Bearer認証(トークン認証)は、要求の応答でサーバが生成した文字列を暗号化することができるBearerトークンと呼ばれるセキュリティトークンを使用します.このトークンは認証ヘッダーによって送られます.JWT(JSON Webトークン)はJSONオブジェクトを使用して当事者間の情報を安全に送信するために使用されるオープンスタンダードです.JWTは情報を検証するためにRSA暗号化アルゴリズムを使用します.

    例から始めましょう。


    ステップ1 :アプリケーションを作成します.
    オープンビジュアルスタジオ2019 ->ファイルマネージャ->プロジェクトに移動します.
    新しいASPを作成します.「AuthCount - Demo」名前を使用したNETコアWebアプリケーションプロジェクト.

    ステップ2 :テンプレートを選択します.
    ASPを選択します.NETコアWeb APIテンプレートと[作成]ボタンをクリックします.

    ステップ3:ビジネスロジックを追加します.
    ソリューションを右クリックします
    新しいサービスフォルダを作成します.
    手順4:サービスメソッドとインターフェイスを追加します.
    「サービス」フォルダを右クリックし、「add ->クラス」と入力します.
    サービスフォルダを右クリックします.

    iExploeservice


    namespaceAuth_Demo.Service
    {
    publicclassEmployeeService:IEmployeeService
        {
    publicboolLogin(string username, string password)
            {
    returnusername.Equals("admin") &&password.Equals("1234");
            }
        }
    }
    
    ステップ5 :認証ハンドラを追加する
    ソリューションを右クリックします.
    usingAuth_Demo.Service;
    usingMicrosoft.AspNetCore.Authentication;
    usingMicrosoft.Extensions.Logging;
    usingMicrosoft.Extensions.Options;
    using System;
    usingSystem.Linq;
    usingSystem.Net.Http.Headers;
    usingSystem.Security.Claims;
    usingSystem.Text;
    usingSystem.Text.Encodings.Web;
    usingSystem.Threading.Tasks;
    
    namespaceAuth_Demo
    {
    publicclassBasicAuthenticationHandler :AuthenticationHandler<authenticationschemeoptions>
        {
    #region Property  
    readonlyIEmployeeService _employeeService;
    #endregion
    
    #region Constructor  
    publicBasicAuthenticationHandler(IEmployeeServiceemployeeService,
    IOptionsMonitor<authenticationschemeoptions> options,
                ILoggerFactory logger,
    UrlEncoder encoder,
    ISystemClock clock)
                : base(options, logger, encoder, clock)
            {
                _employeeService = employeeService;
            }
    #endregion
    
    protectedoverrideasync Task<authenticateresult>HandleAuthenticateAsync()
            {
    string username = null;
    try
                {
    varauthHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]);
    var credentials = Encoding.UTF8.GetString(Convert.FromBase64String(authHeader.Parameter)).Split(':');
                    username = credentials.FirstOrDefault();
    var password = credentials.LastOrDefault();
    
    if(!_employeeService.Login(username, password))
    thrownewArgumentException("Invalid credentials");
                }
    catch (Exception ex)
                {
    returnAuthenticateResult.Fail($"Authentication failed: {ex.Message}");
                }
    
    var claims = new[] {
    newClaim(ClaimTypes.Name, username)
                };
    var identity = newClaimsIdentity(claims, Scheme.Name);
    var principal = newClaimsPrincipal(identity);
    var ticket = newAuthenticationTicket(principal, Scheme.Name);
    
    returnAuthenticateResult.Success(ticket);
            }
    
        }
    }
    </authenticateresult></authenticationschemeoptions></authenticationschemeoptions>
    
    Hire ASP.Net Developer .あなたの検索はここで終わります.
    ステップ6:従業員コントローラと従業員モデルを加えてください.
    従業員
    namespaceAuth_Demo
    {
    publicclassEmployeeModel
        {
    publicint Id { get; set; }
    publicstring Name { get; set; }
        }
    }
    

    従業員コントローラ
    usingMicrosoft.AspNetCore.Authorization;
    usingMicrosoft.AspNetCore.Mvc;
    usingMicrosoft.Extensions.Logging;
    usingSystem.Collections.Generic;
    
    namespaceAuth_Demo.Controllers
    {
        [Authorize]
        [Route("api/[controller]")]
        [ApiController]
    publicclassEmployeeController :ControllerBase
        {
    privatereadonlyILogger<employeecontroller> _logger;
    
    publicEmployeeController(ILogger<employeecontroller> logger)
            {
                _logger = logger;
            }
    
            [HttpGet]
    publicIEnumerable<employeemodel>Get()
            {
                List<employeemodel>emp = new List<employeemodel>
                {
    newEmployeeModel{Id=1,Name="Dhoni" },
    newEmployeeModel{Id=2,Name="Virat" },
    newEmployeeModel{Id=3,Name="Rohit" },
    newEmployeeModel{Id=4,Name="Jasprit" },
    newEmployeeModel{Id=5,Name="Chahal" }
                };
    
    return emp;
    
            }
        }
    }
    </employeemodel></employeemodel></employeemodel></employeecontroller></employeecontroller>
    
    
    ステップ7 :起動ファイルを設定します.
    構成サービスメソッドで設定を追加します.
    services.AddSwaggerGen(c =>
                {
    c.SwaggerDoc("v1", newOpenApiInfo { Title = "Test_Demo", Version = "v1" });
    c.AddSecurityDefinition("basic", newOpenApiSecurityScheme
                    {
                        Name = "Authorization",
                        Type = SecuritySchemeType.Http,
                        Scheme = "basic",
                        In = ParameterLocation.Header,
                        Description = "Authentication"
                    });
    c.AddSecurityRequirement(newOpenApiSecurityRequirement
                    {
                        {
    newOpenApiSecurityScheme
                                {
                                    Reference = newOpenApiReference
                                    {
                                        Type = ReferenceType.SecurityScheme,
                                        Id = "basic"
                                    }
                                },
    newstring[] {}
                        }
                    });
                });
    services.AddAuthentication("BasicAuthentication")
    .AddScheme<authenticationschemeoptions, basicauthenticationhandler="">("BasicAuthentication", null);
    
    services.AddTransient<iemployeeservice, employeeservice="">();
    </iemployeeservice,></authenticationschemeoptions,>
    
    
    ステップ8 :ビルドと実行プロジェクト.



    結論
    このブログでは、swaggerで認証を議論しています.RESTful API記述の標準と仕様を記述するのに使用されるNET 5とSwaggerかOpenapiwhicHer.また、いくつかの例を論じた.