কীভাবে আসপ নেট কোরটিতে বর্তমান ব্যবহারকারী পাবেন


128

ইমেলের মতো ব্যবহারকারীর তথ্য পাওয়ার জন্য আমি একজন বর্তমান ব্যবহারকারী পেতে চাই। তবে আমি এপ নেট কোরটিতে এটি করতে পারি না। আমি খুব বিভ্রান্ত এটা আমার কোড।

HttpContextপ্রায় নিয়ামক নির্মাণে নাল । প্রতিটি ক্রিয়ায় একজন ব্যবহারকারীকে পাওয়া ভাল নয়। আমি একবার ব্যবহারকারীর তথ্য পেতে এবং সেগুলিতে সেট করতে চাই ViewData;

public DashboardController()
{
    var user = HttpContext.User.GetUserId();
}

5
এমভিসি বা ওয়েব এপিআই দিয়ে ব্যবহার করছেন?
তুষার

উত্তর:


172
User.FindFirst(ClaimTypes.NameIdentifier).Value

কনস্ট্রাক্টরের জন্য ইডিটি

নীচে কোড কাজ করে:

public Controller(IHttpContextAccessor httpContextAccessor)
{
    var userId = httpContextAccessor.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value 
}

আরটিএমের জন্য সম্পাদনা করুন

আপনার নিবন্ধন করা উচিত IHttpContextAccessor:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddHttpContextAccessor();
    }

2
এটি ক্রিয়াকলাপে কাজ করে। তবে আমি নিয়ামক নির্মাণকারী ব্যবহার করতে চাই।
মেহরান হাফিজি

3
এটি কি ক্লাসে ব্যবহার করা সম্ভব?
মেহরান হাফিজি

5
ClaimTypes.NameIdentifierবর্তমান ব্যবহারকারী আইডি ClaimTypes.Nameদেয় এবং ব্যবহারকারীর নাম দেয়।
নিকোলা কোস্তভ

3
কেউ কি আমাকে বলতে পারবেন যে ইউজারপ্রিন্সিপাল.কন্টেন.নামের সাথে কী ভুল?
টিপুরা

2
@ অ্যাডেমকাগলিন কিছু কারণে ব্যবহারকারী nullআমার ক্ষেত্রে ফিরে আসছেন ? আমি .Net core 2.1 Web apiযদিও ব্যবহার করছি ।
শ্রুতি বর্গি

54

সহজ উপায় যা কাজ করে এবং আমি পরীক্ষা করেছিলাম।

private readonly UserManager<IdentityUser> _userManager;
public CompetitionsController(UserManager<IdentityUser> userManager)
{
    _userManager = userManager;
}

var user = await _userManager.GetUserAsync(HttpContext.User);

তারপরে আপনি এই ভেরিয়েবলের সমস্ত বৈশিষ্ট্য পছন্দ করতে পারেন user.Email। আমি আশা করি এটি কারও সাহায্য করবে।

সম্পাদন করা :

এটি একটি স্পষ্টতই সহজ জিনিস তবে এএসপি.নেট কোরের বিভিন্ন ধরণের প্রমাণীকরণ সিস্টেমের জটিল কারণ। আমি আপডেট করছি কারণ কিছু লোক পাচ্ছেnull

জেডব্লিউটি প্রমাণীকরণের জন্য (ASP.NET কোর v3.0.0-প্রাকদর্শন 7- এ পরীক্ষিত):

var email = HttpContext.User.Claims.FirstOrDefault(c => c.Type == "sub")?.Value;

var user = await _userManager.FindByEmailAsync(email);

1
এসপ নেট কোর ২
জেএমডন

2
_উজারম্যানেজার কি?
নুলভক্সপপুলি

6
এএসপি.নেট কোর আইডেন্টিটিতে, ব্যবহারকারী ব্যবস্থাপক ব্যবহারকারীদের তৈরি করতে নির্ভরতা ইনজেকশন দ্বারা সরবরাহ করা একটি পরিষেবা। আরও তথ্যের জন্য ডক্স দেখুন :
আহমদ

2
এটি কীভাবে একটি অ-অসম্পূর্ণ পদ্ধতিতে অর্জন করা যায়?
T3.0

আমার জন্য শূন্য ফিরে আসছে। কেন?
আলবার্তো ক্লুদিও ম্যান্ডলেট

22

Asp.NET Core এ বর্তমান ব্যবহারকারীর পাওয়ার অন্য একটি উপায় রয়েছে - এবং আমি মনে করি এটি এখানে কোথাও দেখেছি, SO on

// Stores UserManager
private readonly UserManager<ApplicationUser> _manager; 

// Inject UserManager using dependency injection.
// Works only if you choose "Individual user accounts" during project creation.
public DemoController(UserManager<ApplicationUser> manager)  
{  
    _manager = manager;  
}

// You can also just take part after return and use it in async methods.
private async Task<ApplicationUser> GetCurrentUser()  
{  
    return await _manager.GetUserAsync(HttpContext.User);  
}  

// Generic demo method.
public async Task DemoMethod()  
{  
    var user = await GetCurrentUser(); 
    string userEmail = user.Email; // Here you gets user email 
    string userId = user.Id;
}  

এই কোডটি ডেমোকন্ট্রোলার নামে নিয়ন্ত্রকের কাছে যায়। উভয় অপেক্ষা না করে কাজ করবে না (সংকলন করবে না);)


এর জন্য পরিচয় ব্যবহারের প্রয়োজন
ফ্রেজ

1
অ্যাপ্লিকেশন ব্যবহারকারী কী?
মাইক

ApplicationUser সাধারণত IdentityUser থেকে উত্তরাধিকারসূত্রে হয় তাই এটি অতিরিক্ত সম্পত্তি, ইত্যাদি বাড়ানো যেতে পারে
Corgalore

20

আমার বলতে হবে যে আমি বেশ অবাক হয়েছিলাম যে এইচটিটিপি কনট্রাক্টরের অভ্যন্তরে নাল। আমি নিশ্চিত এটি পারফরম্যান্সের কারণেই। নিশ্চিত করেছেন যে IPrincipalনীচে বর্ণিত হিসাবে এটি ব্যবহার করে এটি কনস্ট্রাক্টরে ইনজেকশনের ব্যবস্থা করে। এটি মূলত গৃহীত উত্তরের মতো একই কাজ করছে তবে আরও ইন্টারফেসিও পদ্ধতিতে।


এই প্রশ্নের সন্ধানকারী যে কেউ জেনেরিকের উত্তর খুঁজছেন "বর্তমান ব্যবহারকারী কীভাবে পাবেন?" আপনি কেবল Userএখান থেকে সরাসরি অ্যাক্সেস করতে পারেন Controller.User। তবে আপনি কেবল এটি অ্যাকশন পদ্ধতির অভ্যন্তরেই করতে পারেন (আমি ধরে নিই কারণ নিয়ামকরা কেবল এইচটিপিপেক্সটেক্সট এবং পারফরম্যান্সের কারণে চালায় না)।

তবে - যদি আপনার কনস্ট্রাক্টরে এটির প্রয়োজন হয় (যেমন ওপি করেছেন) বা অন্য ইনজেক্টেবল অবজেক্ট তৈরি করতে প্রয়োজন যা বর্তমান ব্যবহারকারীর প্রয়োজন তখন নীচে একটি আরও ভাল পদ্ধতির উপায়:

ব্যবহারকারী পেতে আইপিআরসিস্ট্যানাল ইনজেক্ট

প্রথম দেখা IPrincipalএবংIIdentity

public interface IPrincipal
{
    IIdentity Identity { get; }
    bool IsInRole(string role);
}

public interface IIdentity
{
    string AuthenticationType { get; }
    bool IsAuthenticated { get; }
    string Name { get; }
}

IPrincipalএবং IIdentityব্যবহারকারী এবং ব্যবহারকারীর নাম উপস্থাপন করে। 'প্রিন্সিপাল' বিজোড় লাগলে উইকিপিডিয়া আপনাকে সান্ত্বনা দেবে

আপনি এটি পেয়েছেন কিনা তা আপনি উপলব্ধি করা গুরুত্বপূর্ণ IHttpContextAccessor.HttpContext.User, ControllerBase.Userবা ControllerBase.HttpContext.Userআপনি এমন একটি বস্তু পেয়ে ClaimsPrincipalযা যা বাস্তবায়ন করে এমন একটি বস্তুর গ্যারান্টিযুক্তIPrincipal

এএসপি.এনইটি এই মুহূর্তে ব্যবহার করে এমন কোনও অন্য ধরণের ব্যবহারকারীর Userনেই, (তবে এটি অন্য কোনও কিছু প্রয়োগ করতে পারেনি তা বলার অপেক্ষা রাখে না IPrincipal)।

সুতরাং আপনার যদি এমন কিছু থাকে যা 'বর্তমান ব্যবহারকারীর নাম' এর উপর নির্ভরশীলতা রয়েছে যা আপনি ইনজেকশন চান তা আপনার ইনজেকশন করা উচিত IPrincipalএবং অবশ্যই হওয়া উচিত নয় IHttpContextAccessor

গুরুত্বপূর্ণ:IPrincipal সরাসরি আপনার নিয়ামক বা ক্রিয়া পদ্ধতিতে ইনজেকশন দেওয়ার সময় নষ্ট করবেন না - এটি Userইতিমধ্যে সেখানে আপনার জন্য উপলব্ধ যেহেতু এটি অর্থহীন ।

ইন startup.cs:

   // Inject IPrincipal
   services.AddTransient<IPrincipal>(provider => provider.GetService<IHttpContextAccessor>().HttpContext.User);

তারপরে আপনার ডিআই অবজেক্টে যার প্রয়োজন ব্যবহারকারীকে আপনি কেবলমাত্র IPrincipalবর্তমান ব্যবহারকারী পেতে ইনজেক্ট করেন।

এখানে সর্বাধিক গুরুত্বপূর্ণ বিষয়টি হল আপনি যদি ইউনিট পরীক্ষা করে থাকেন তবে আপনাকে কোনও পাঠানোর দরকার নেই HttpContext, তবে কেবল এমন কিছু উপহাস করা উচিত যা প্রতিনিধিত্ব করে IPrincipal যা কেবল হতে পারে ClaimsPrincipal

একটি অতিরিক্ত গুরুত্বপূর্ণ বিষয় যা সম্পর্কে আমি 100% নিশ্চিত নই। আপনার যদি আসল দাবিগুলি অ্যাক্সেস করতে হয় তবে ClaimsPrincipalআপনার কাছে কাস্ট IPrincipalকরতে হবে ClaimsPrincipal। এটি ঠিক আছে যেহেতু আমরা জানি 100% যে রানটাইম সময়ে এটি টাইপের হয় (যেহেতু এটি HttpContext.Userতাই)। আমি আসলে কনস্ট্রাক্টরে এটি করতে পছন্দ করি যেহেতু আমি ইতিমধ্যে জানি যে কোনও IPrincipal একটি হবে ClaimsPrincipal

আপনি যদি উপহাস করছেন, কেবল একটি ClaimsPrincipalসরাসরি তৈরি করুন এবং যা যা লাগে তা এটিকে দিন IPrincipal

কেন ঠিক কোন ইন্টারফেসের জন্য IClaimsPrincipalআমি নিশ্চিত নই। আমি ধরে নিলাম এমএস সিদ্ধান্ত নিয়েছে যে ClaimsPrincipalএটি কেবলমাত্র একটি বিশেষ 'সংগ্রহ' যা কোনও ইন্টারফেসের ওয়ারেন্ট দেয় না।


2
এটি আপনাকে আপনার প্রয়োগের যে কোনও জায়গায় বর্তমান ব্যবহারকারীর ইনজেক্ট করতে দেয়, দুর্দান্ত উত্তর!
মাচাডো

1
এটি কাজ করে না। আমি সবসময় পেতে nullইনজেকশনের জন্য IPrincipal। আমারও ট্রান্সিয়েন্ট সার্ভিসটি …GetService<IHttpContextAccessor>()?.HttpContext.User…(এর সাথে ?) হিসাবে যুক্ত করার দরকার ছিল কারণ এটি অন্যথায় ক্র্যাশ হয়ে যায় (গেট সার্ভিস নালাম ফিরে আসল)।
ইগু

আপনি ঠিক services.AddTransient(provider => provider.GetService<IHttpContextAccessor>().HttpContext.User);এইচটিপিপি কনটেক্সট হিসাবেই করতে পারেন ser ব্যবহারকারী একটি দাবি প্রিন্সিপাল।
জে জেলোস

18

এটি প্রদর্শিত হবে যে এখন পর্যন্ত (2017 এর এপ্রিল) নীচের কাজ করে:

public string LoggedInUser => User.Identity.Name;

কমপক্ষে একটি মধ্যে Controller


4
আপনি স্পষ্টভাবে 'সিস্টেম.সিকিউরিটি.প্রিন্সিপাল.আইআইডেন্টিটি' টাইপটিকে 'স্ট্রিং' তে রূপান্তর করতে পারবেন না।
অ্যান্থনি হুয়াং

3
স্ট্রিং LoggedInUser = User.Identity.Name;
অ্যালিক

5
=>অপারেটরটিকে এর আগে যেমন ব্যবহার করা দেখা যায় নি, তাকে "এক্সপ্রেশন বডি ডেফিনেশন" বলা হয় এবং এই ডকুমেন্টেশনে বর্ণনা করা হয় । আমার ক্ষেত্রে ভবিষ্যতের লোকেরা ভাবছেন।
নাথান ক্লিমেন্ট

আপনার কোড সম্ভবত সম্পাদন করা পূর্বে কম্পাইল করতে পারে না, দেওয়া থেকে কোনো রূপান্তর আছে যে IIdentityকরতে string, যেমন শীর্ষ মন্তব্যে বলেন। সম্পাদনা সহজভাবে এটি স্থির করে। আমি নিশ্চিত না যে আপনি কীভাবে আপনার সিদ্ধান্তে পৌঁছেছেন (বিশেষত যেহেতু "সম্পাদক" পয়েন্টগুলি কেবল 2k খ্যাতির নীচের ব্যবহারকারীদের দেওয়া হয়)।
27:28

9

সম্ভবত আমি উত্তরটি দেখতে পাইনি, তবে আমি এটি এটিই করি।

  1. । নেট কোর -> বৈশিষ্ট্য -> লঞ্চসেটেটিংস.জসন

আপনার এই মানগুলি পরিবর্তন করতে হবে

"windowsAuthentication": true, // needs to be true
"anonymousAuthentication": false,  // needs to be false 

স্টার্টআপ.সি -> কনফিগার সার্ভিসেস (...)

services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();

এমভিসি বা ওয়েব এপিআই কন্ট্রোলার

private readonly IHttpContextAccessor _httpContextAccessor;
//constructor then
_httpContextAccessor = httpContextAccessor;

নিয়ামক পদ্ধতি:

string userName = _httpContextAccessor.HttpContext.User.Identity.Name;

ফলাফলটি ব্যবহারকারী নাম যেমন = ডোমেন \ ব্যবহারকারীর নাম


4

আমার সমস্যাটি ছিল লগ-ইন করা ইউজারকে সিএসটিএমএল ফাইলে কোনও অবজেক্ট হিসাবে অ্যাক্সেস করা। ভিউডাটাতে আপনি ব্যবহারকারী চেয়েছিলেন বিবেচনা করে, এই পদ্ধতিটি সহায়ক হতে পারে:

সিএসটিএমএল ফাইলটিতে

@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>
    @UserManager.FindByNameAsync(UserManager.GetUserName(User)).Result.Email
    </title>
  </head>
  <body>

  </body>
</html>

আপনি কীভাবে লোড করার জন্য একটি নেভিগেশন সম্পত্তি পেতে পারেন তার কোনও ধারণা (আমার অ্যাপ্লিকেশন ব্যবহারকারী শ্রেণিতে কোনও সংস্থা নেভিগেশন সম্পত্তিটির নাম)। নেভিগেশন বৈশিষ্ট্য অন্তর্ভুক্ত করার উপায় দেখেনি।
হান্টার নেলসন

1

বিদ্যমান উত্তরগুলি ছাড়াও আমি যুক্ত করতে চাই যে আপনার কাছে এমন একটি ক্লাস উদাহরণ উপলব্ধ অ্যাপ-ওয়াইড থাকতে পারে যা ব্যবহারকারীর সাথে সম্পর্কিত ডেটা UserIDইত্যাদি রাখে etc.

এটি রিফ্যাক্টর জন্য যেমন দরকারী হতে পারে। আপনি UserIDপ্রতিটি নিয়ামক ক্রিয়ায় আনতে এবং UserIDপরিষেবা স্তর সম্পর্কিত প্রতিটি পদ্ধতিতে একটি অতিরিক্ত প্যারামিটার ঘোষণা করতে চান না ।

আমি একটি গবেষণা করেছি এবং আমার পোস্ট এখানে ।

আপনি কেবল আপনার শ্রেণিটি প্রসারিত করুন যা থেকে আপনি সম্পদ DbContextযুক্ত করে উত্পন্ন করেছেন UserId(বা Sessionএই সম্পত্তি রয়েছে এমন কোনও কাস্টম শ্রেণি প্রয়োগ করুন )।

ফিল্টার স্তরে আপনি আপনার শ্রেণীর উদাহরণ আনতে এবং UserIdমান নির্ধারণ করতে পারেন ।

এরপরে আপনি যেখানেই আপনার উদাহরণটি ইনজেক্ট করেন - এতে প্রয়োজনীয় ডেটা থাকবে (আজীবন অনুরোধ অনুযায়ী হওয়া উচিত , সুতরাং আপনি AddScopedপদ্ধতিটি ব্যবহার করে এটি নিবন্ধ করুন )।

কাজের উদাহরণ:

public class AppInitializationFilter : IAsyncActionFilter
{
    private DBContextWithUserAuditing _dbContext;

    public AppInitializationFilter(
        DBContextWithUserAuditing dbContext
        )
    {
        _dbContext = dbContext;
    }

    public async Task OnActionExecutionAsync(
        ActionExecutingContext context,
        ActionExecutionDelegate next
        )
    {
        string userId = null;
        int? tenantId = null;

        var claimsIdentity = (ClaimsIdentity)context.HttpContext.User.Identity;

        var userIdClaim = claimsIdentity.Claims.SingleOrDefault(c => c.Type == ClaimTypes.NameIdentifier);
        if (userIdClaim != null)
        {
            userId = userIdClaim.Value;
        }

        var tenantIdClaim = claimsIdentity.Claims.SingleOrDefault(c => c.Type == CustomClaims.TenantId);
        if (tenantIdClaim != null)
        {
            tenantId = !string.IsNullOrEmpty(tenantIdClaim.Value) ? int.Parse(tenantIdClaim.Value) : (int?)null;
        }

        _dbContext.UserId = userId;
        _dbContext.TenantId = tenantId;

        var resultContext = await next();
    }
}

আরও তথ্যের জন্য আমার উত্তর দেখুন


0

গ্রহণও IdentityUserকাজ করবে। এটি একটি বর্তমান ব্যবহারকারী অবজেক্ট এবং ব্যবহারকারীর সমস্ত মান পুনরুদ্ধার করা যেতে পারে।

private readonly UserManager<IdentityUser> _userManager;
public yourController(UserManager<IdentityUser> userManager)
{
    _userManager = userManager;
}

var user = await _userManager.GetUserAsync(HttpContext.User);

0

আপনি যদি স্ক্যাফলড আইডেন্টিটি ব্যবহার করেন এবং অ্যাসপ নেট কোর 2.2+ ব্যবহার করে থাকেন তবে আপনি বর্তমান ব্যবহারকারীকে এর মতো দর্শন থেকে অ্যাক্সেস করতে পারেন:

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

 @if (SignInManager.IsSignedIn(User))
    {
        <p>Hello @User.Identity.Name!</p>
    }
    else
    {
        <p>You're not signed in!</p>
    }

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.2&tabs=visual-studio


0

এটি পুরানো প্রশ্ন তবে আমার মামলাটি দেখায় যে এখানে আমার মামলা নিয়ে আলোচনা হয়নি।

আমি সাইমন_উইভারের সবচেয়ে উত্তরটি পছন্দ করি ( https://stackoverflow.com/a/54411397/2903893 )। তিনি আইপি প্রিন্সিপাল এবং আইআইডেন্টিটি ব্যবহার করে কীভাবে ব্যবহারকারীর নাম পাবেন তা বিশদে ব্যাখ্যা করেছেন। এই উত্তরটি একেবারে সঠিক এবং আমি এই পদ্ধতির ব্যবহার করার পরামর্শ দিচ্ছি। যাইহোক, ডিবাগিংয়ের সময় আমি সমস্যার মুখোমুখি হয়েছিলাম যখন ASP.NET পরিষেবা নীতিটি সঠিকভাবে গড়ে তুলতে পারে না । (বা অন্য কথায়, আইপিআরসিপলাল.আইডেন্টিটি.নামটি নাল)

এটি সুস্পষ্ট যে ব্যবহারকারীর নাম পাওয়ার জন্য এমভিসি ফ্রেমওয়ার্কটি এটি কোথাও থেকে নেওয়া উচিত। .NET বিশ্বে, ASP.NET বা ASP.NET কোর ওপেন আইডি কানেক্ট মিডলওয়্যার ব্যবহার করছে। সাধারণ দৃশ্যে ওয়েব অ্যাপস কোনও ওয়েব ব্রাউজারে কোনও ব্যবহারকারীকে প্রমাণীকরণ করে। এই দৃশ্যে, ওয়েব অ্যাপ্লিকেশনটি ব্যবহারকারীর ব্রাউজারকে তাদের অ্যাজুরে এডিতে সাইন ইন করার নির্দেশ দেয়। অ্যাজুরে এডি ব্যবহারকারীর ব্রাউজারের মাধ্যমে একটি সাইন-ইন প্রতিক্রিয়া ফিরিয়ে দেয়, এতে সুরক্ষা টোকনে ব্যবহারকারী সম্পর্কে দাবি রয়েছে। এটি আপনার অ্যাপ্লিকেশনটির কোডে কাজ করার জন্য, আপনাকে ওয়েব অ্যাপ্লিকেশনটি সাইন-ইন করে এমন কর্তৃত্ব প্রদান করতে হবে। আপনি যখন আপনার ওয়েব অ্যাপ্লিকেশনটি অ্যাজুরে পরিষেবাতে স্থাপন করবেন তখন এই প্রয়োজনীয়তাগুলি পূরণ করার জন্য সাধারণ দৃশ্যটি হ'ল ওয়েব অ্যাপ্লিকেশনটি কনফিগার করা হয়: "অ্যাপ পরিষেবাদি" -> আপনার অ্যাপ -> "প্রমাণীকরণ / অনুমোদন" ফলক -> "অ্যাপ্লিকেশন পরিষেবা প্রমাণীকরণ" = "চালু"https://github.com/Huachao/azure-content/blob/master/articles/app-service-api/app-service-api-authentication.md )। আমি বিশ্বাস করি (এটি আমার শিক্ষিত অনুমান) যে এই প্রক্রিয়াটির অধীনে উইজার্ড নীচের অনুচ্ছেদে দেখানো একই সেটিংস যুক্ত করে এই ওয়েব অ্যাপ্লিকেশনটির "প্যারেন্ট" ওয়েব কনফিগারেশনকে সামঞ্জস্য করে। মূলত, কেন এই পদ্ধতিটি এএসপি.নেট কোরে কাজ করে না তা হ'ল "প্যারেন্ট" মেশিন কনফিগারেশনটি ওয়েবকনফিগ দ্বারা উপেক্ষা করা হয়েছে। (এটি 100% নিশ্চিত নয়, আমি কেবল আমার কাছে সর্বোত্তম ব্যাখ্যা দিয়েছি)। সুতরাং, এটি কাজ করার জন্য আপনার নিজের অ্যাপ্লিকেশনটিতে এটি ম্যানুয়ালি সেটআপ করা দরকার।

এখানে একটি নিবন্ধ দেওয়া আছে যা কীভাবে আপনার অ্যাপটিকে অ্যাজুরে এডি ব্যবহার করতে সর্বাধিক সেটআপ করবেন তা ব্যাখ্যা করে। https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/aspnetcore2-2

পদক্ষেপ 1: আপনার অ্যাজুর এডি ভাড়াটে সাথে নমুনাটি নিবন্ধ করুন। (এটা সুস্পষ্ট, আমার ব্যাখ্যার সময় ব্যয় করতে চান না)।

পদক্ষেপ 2: অ্যাপসেটেটিংস.জসন ফাইলে: আপনি আবেদন রেজিস্ট্রেশন পোর্টালে নিবন্ধিত অ্যাপ্লিকেশন থেকে অ্যাপ্লিকেশন আইডির সাথে ক্লায়েন্টআইডি মানটি প্রতিস্থাপন করুন। পদক্ষেপ 1 তে টেন্যান্ট আইডি মানটি প্রতিস্থাপন করুন

পদক্ষেপ 3: সূচনাপ্রাপ্ত ফাইলগুলি এবং কনফিগার সার্ভিস পদ্ধতিতে খুলুন। লাইনটি অন্তর্ভুক্ত থাকার পরে .AdAzureAD নীচের কোডটি সন্নিবেশ করুন, যা আপনার অ্যাপ্লিকেশনটিকে অ্যাজুরে এডি v2.0 শেষ পয়েন্ট সহ ব্যবহারকারীদের সাইন ইন করতে সক্ষম করে, এটি উভয় ওয়ার্ক এবং স্কুল এবং মাইক্রোসফ্ট ব্যক্তিগত অ্যাকাউন্ট

services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
    options.Authority = options.Authority + "/v2.0/";
    options.TokenValidationParameters.ValidateIssuer = false;
});

সংক্ষিপ্তসার : আমি আরও একটি সম্ভাব্য সমস্যা দেখিয়েছি যা একটি ত্রুটির প্রতি ইঙ্গিত দিতে পারে যে বিষয়টি শুরু করার বিষয়টি ব্যাখ্যা করা হয়েছে। এই সমস্যার কারণ অজুর এডি (ওপেন আইডি মিডলওয়্যার) এর কনফিগারেশনগুলি হারিয়েছে। এই সমস্যাটি সমাধান করার জন্য আমি ম্যানুয়ালি "প্রমাণীকরণ / অনুমোদন" সেটআপ করার প্রস্তাব দিই। এটি কীভাবে সেটআপ করা যায় তার সংক্ষিপ্ত বিবরণ যুক্ত করা হয়।


0

বেশিরভাগ উত্তরগুলি HttpContextডকুমেন্টেশন থেকে কীভাবে সেরা পরিচালনা করতে হয় তাও দেখায় যা আমি যা করেছি is

আমি উল্লেখ করতে চাইনি যে আপনি ডিবাগ করার সময় আপনার প্রকল্পের সেটিংস পরীক্ষা করতে চান, ডিফল্ট Enable Anonymous Authentication = true


-1

আমি আমার সমাধান পেয়েছি

var claim = HttpContext.User.CurrentUserID();

public static class XYZ
{
    public static int CurrentUserID(this ClaimsPrincipal claim)
    {
        var userID = claimsPrincipal.Claims.ToList().Find(r => r.Type == 
         "UserID").Value;
        return Convert.ToInt32(userID);
    }
    public static string CurrentUserRole(this ClaimsPrincipal claim)
    {
        var role = claimsPrincipal.Claims.ToList().Find(r => r.Type == 
        "Role").Value;
        return role;
    }
}

1
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
আলেকজান্ডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.