নেট কোর T.০ সহ জেডাব্লুটি প্রমাণীকরণ এবং সোয়াগার


10

আমি। নেট কোর 3.0 এর সাথে কিছু ওয়েব এপি বিকাশ করছি এবং এটি সোয়াশবাকল.সওয়াগার এর সাথে সংহত করতে চাই। এটি ঠিকঠাক কাজ করছে, তবে যখন আমি জেডাব্লুটি প্রমাণীকরণ যুক্ত করব তখন এটি আমার প্রত্যাশা মতো কাজ করে না। এটি করতে, আমি নীচের কোডটি যুক্ত করেছি:

  services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo { Title = "My Web API", Version = "v1" });
            c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
            {
                Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                Name = "Authorization",
                In = ParameterLocation.Header,
                Type = SecuritySchemeType.ApiKey
            });

        });

AddSecurityDefinitionফাংশন যুক্ত করার পরে , আমি অনুমোদন বোতামটি দেখতে পাচ্ছি এবং আমি এটিতে ক্লিক করলে নীচের ফর্মটি দেখতে পাচ্ছি: এখানে চিত্র বর্ণনা লিখুন

তারপরে আমি টাইপ করি Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjh, এটি করার পরে আমি authorization: Bearer WhatEverApiKeyIsfgdgdgdg845734987fgdhgiher635kjhঅনুরোধের শিরোনামে দেখতে আশা করি , যখন আমি সোয়াগার থেকে ওয়েব অ্যাপিকে একটি অনুরোধ প্রেরণ করি। তবে অনুমোদনের অনুরোধ শিরোনামে যুক্ত করা হয়নি। আমি SwashBuckle.Swagger (5.0.0-rc3) ব্যবহার করছি। দয়া করে নোট করুন এমন অনেকগুলি নমুনা রয়েছে যা। নেট কোর 2.0 তে সূক্ষ্মভাবে কাজ করে তবে সর্বশেষ সংস্করণে স্বশবাকল সোয়াগার ফাংশনগুলি পরিবর্তিত হয়েছে তাই আমি সেই নমুনাগুলি ব্যবহার করতে পারি না।



আপনি যে লিঙ্কটি উল্লেখ করেছেন তাতে কোনও উত্তর নেই। এছাড়াও। নেট কোর 3.0 কিছুটা আলাদা।
মেহরদাদ বাবাকি

লিঙ্কিত প্রশ্নের উত্তরে বর্ণিত হিসাবে - উত্তরটি .AddSecurityRequirement(বিশ্বব্যাপী) যুক্ত করা বা .Security(অপারেশন পর্যায়ে) যুক্ত করা হয়। AddSecurityDefinitionএকা যথেষ্ট নয়
হেলেন

আমি যোগ করেছি কিন্তু কিছুই পরিবর্তন হয়নি। আমি মনে করি সে কারণেই এটি উত্তর হিসাবে নির্বাচিত হয়নি।
মেহরদাদ বাবাকি

আমি সম্প্রতি অন্য প্রশ্নের উত্তরটি দিয়ে
পাভলোস

উত্তর:


33

কিছু গবেষণা করার পরে, আমি শেষ পর্যন্ত উত্তর এখানে খুঁজে পেয়েছি

এই পৃষ্ঠাটি দেখার আগে, আমি জানতাম যে অনেকগুলি নমুনার কারণে আমার AddSecurityRequirementপরে ব্যবহার করা উচিত AddSecurityDefinition, তবে এটি একটি সমস্যা ছিল যে .NET কোর 3.0 এ ফাংশনটির পরামিতিগুলি পরিবর্তন হয়েছে।

যাইহোক, চূড়ান্ত উত্তর নীচের মত:

services.AddSwaggerGen(c =>
{
  c.SwaggerDoc("v1", new OpenApiInfo { 
    Title = "My API", 
    Version = "v1" 
  });
  c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme {
    In = ParameterLocation.Header, 
    Description = "Please insert JWT with Bearer into field",
    Name = "Authorization",
    Type = SecuritySchemeType.ApiKey 
  });
  c.AddSecurityRequirement(new OpenApiSecurityRequirement {
   { 
     new OpenApiSecurityScheme 
     { 
       Reference = new OpenApiReference 
       { 
         Type = ReferenceType.SecurityScheme,
         Id = "Bearer" 
       } 
      },
      new string[] { } 
    } 
  });
});

অনেক ধন্যবাদ, এটি আমার সাথে ভাল কাজ করেছে
আনাস আল-কুদাহ

2
এটি কাজ করেছে .. টিপ: আসল টোকেনের আগে "বেয়ারার" লিখতে ভুলবেন না। এবং এটি কিছুটা বিরক্তিকর যে সোয়াগার সর্বদা অনুমোদিত বলে, আপনি টেক্সটবক্সে যা লিখুন তা নয় ... ধন্যবাদ!
কোডহ্যাকার

এটি নেট কোর 3 এবং সোয়াগার
18

যে জীবন বাঁচায় সে বিশ্বকে বাঁচায়। আপনি আমার জীবন বাঁচিয়েছেন ;-) thx
ওয়াহিদ ফারাহ্মান্দিয়ান

6

আপনি যদি সোয়াগার 3.0 ব্যবহার করেন তবে এটিতে জেডাব্লুটি প্রমাণীকরণের জন্য বিল্ড-ইন সমর্থন রয়েছে।

নীচের চিত্রের মতো আপনাকে ওপেনস্পিচুরিসিচেমিতে প্যারামিটার লোকেশন Hহাইডার, সিকিউরিটিশিমেটাইপ.এইচটিটিপি, বহনকারী এবং জেডাব্লুটি ব্যবহার করতে হবে।

এর পরে, আপনাকে বেয়ার {টোকেন} ফর্ম্যাটে টোকেন নির্দিষ্ট করার দরকার নেই । কেবলমাত্র টোকেন নির্দিষ্ট করুন এবং সুরক্ষা স্কিমটি স্বয়ংক্রিয়ভাবে এটি শিরোনামে প্রয়োগ করবে।

// Bearer token authentication
OpenApiSecurityScheme securityDefinition = new OpenApiSecurityScheme()
{
    Name = "Bearer",
    BearerFormat = "JWT",
    Scheme = "bearer",
    Description = "Specify the authorization token.",
    In = ParameterLocation.Header,
    Type = SecuritySchemeType.Http,
};
c.AddSecurityDefinition("jwt_auth", securityDefinition);

// Make sure swagger UI requires a Bearer token specified
OpenApiSecurityScheme securityScheme = new OpenApiSecurityScheme()
{
    Reference = new OpenApiReference()
    {
        Id = "jwt_auth",
        Type = ReferenceType.SecurityScheme
    }
};
OpenApiSecurityRequirement securityRequirements = new OpenApiSecurityRequirement()
{
    {securityScheme, new string[] { }},
};
c.AddSecurityRequirement(securityRequirements);

এখানে চিত্র বর্ণনা লিখুন


ধন্যবাদ! আমার পক্ষে কার্যকর হয়নি এমন অনেক পোস্টের পরেও এই পদ্ধতিটি করেছে !!
ম্যাট ক্যাস্তো

2

আপনি যদি নিজে নিজে একটি টোকেন যোগ করতে না চান এবং আপনি চান পরিচয় সার্ভারে একটি ক্লায়েন্টআইড পাশ করার সাথে সাথে স্কোপগুলি নির্বাচনযোগ্য হয় আপনি এই জাতীয় কিছু যুক্ত করতে পারেন।

আমি অন্তর্নিহিত প্রবাহ ব্যবহার করেছি, তবে আপনি নিম্নলিখিত প্রক্রিয়াটি ব্যবহার করে যে কোনও প্রবাহকে কনফিগার করতে পারেন:

options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme()
{
  Flows = new OpenApiOAuthFlows
  {
    Implicit = new OpenApiOAuthFlow
    {                            
      AuthorizationUrl = new Uri("http://localhost"),
      TokenUrl = new Uri("http://localhost"),
      Scopes = new Dictionary<string, string>
      {
        { "Foundation API", "FoundationApi" }
      }
    }
  },
  In = ParameterLocation.Header,                    
  Name = "Authorization",
  Type = SecuritySchemeType.OAuth2                    
});

আউটপুটটি এরকম হবে:

এখানে চিত্র বর্ণনা লিখুন


1

এখানে সোয়াশবাকল-এসপনেটকোর 5.3.2 এর জন্য একটি সমাধান আপডেট করা হয়েছে, যা আইয়েনটিটি সার্ভার 4 এর সাথে একীভূত হয়েছে, এবং একটি এআইপি বায়ার টোকেন ব্যবহার করে সুরক্ষিত।

ইন ConfigureServices()পদ্ধতি:

        services.AddSwaggerGen(options =>
        {
            options.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
            options.AddSecurityDefinition("Bearer", SecuritySchemes.BearerScheme(Configuration));
            options.AddSecurityRequirement(new OpenApiSecurityRequirement()
            {
                { SecuritySchemes.OAuthScheme, new List<string>() }
            });
        });

ইন Configure()পদ্ধতি:

        app.UseSwaggerUI(options =>
        {
            options.SwaggerEndpoint("/My.Api/swagger/v1/swagger.json", "My API V1");
            options.OAuthClientId(Clients.TestClient);
            options.OAuthAppName("My Api - Swagger");
            options.OAuthClientSecret(Configuration["TestClientSecret"]);
        });

internal static class SecuritySchemes
{
    public static OpenApiSecurityScheme BearerScheme(IConfiguration config) => new OpenApiSecurityScheme
    {
        Type = SecuritySchemeType.OAuth2,
        Description = "Standard authorisation using the Bearer scheme. Example: \"bearer {token}\"",
        In = ParameterLocation.Header,
        Name = "Authorization",
        Scheme = "Bearer",
        OpenIdConnectUrl = new System.Uri($"{config["TokenServerUrl"]}.well-known/openid-configuration"),
        BearerFormat = "JWT",
        Flows = new OpenApiOAuthFlows
        {
            Password = new OpenApiOAuthFlow
            {
                AuthorizationUrl = new System.Uri($"{config["TokenServerUrl"]}connect/authorize"),
                Scopes = new Dictionary<string, string>
                    {
                        { Scopes.Api, "My Api" }
                    },
                TokenUrl = new System.Uri($"{config["TokenServerUrl"]}connect/token")
            }
        }
    };

    public static OpenApiSecurityScheme OAuthScheme => new OpenApiSecurityScheme
    {
        Reference = new OpenApiReference
        {
            Type = ReferenceType.SecurityScheme,
            Id = "Bearer"
        },
        Scheme = "oauth2",
        Name = "Bearer",
        In = ParameterLocation.Header,

    };
}

এটি জীবন রক্ষাকারী। এটি অন্তর্নিহিত প্রবাহের জন্যও কাজ করে যেখানে আমি প্রবাহ সেটআপে পাসওয়ার্ডকে ইমপ্লিকেটে বদলেছি। তাই আপনাকে অনেক ধন্যবাদ!
Larsbj

0

যদি কেউ এনএসওয়াগ ব্যবহার করে এবং সমাধানটি সন্ধানের পরে এখানে পৌঁছেছে তবে এখানে সরকারী নথির লিঙ্কটি দেওয়া আছে।

এনএসওয়াগ জেডাব্লুটি প্রমাণীকরণ সক্ষম করে

পিএস: আমি জানি যে আসল প্রশ্নটি ছিল সোয়াশবাকেলের জন্য, তবে এনএসওয়াগের জন্য অনুসন্ধান করার সময় গুগল এই লিঙ্কটি প্রথম দেখায়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.