Open Closed

Token Authentication #5253


User avatar
0
in4tek.abp created
  • ABP Framework version: v7.2.0
  • UI type: Angular
  • DB provider: EF Core
  • Tiered (MVC) or Identity Server Separated (Angular): yes

Hi, I have a question about the functionality Microsoft Azure Login. I would retrieve the token authentication double-via to pass PowerBI Dashboard, but i don't found the code about it. Can you help me? Tnx

Markdown supported.
Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)

10 Answer(s)
  • User Avatar
    0
    liangshiwei created
    Fullstack Developer

    HI,

    Can you explain it in detail? thanks.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    in4tek.abp created

    Hi, I logged into my abp application with Microsoft account; now, I would like to embed PowerBI Dashboard, but to do this I need to have a Token to pass to PowerBI. I can't intercept the token... How can I do it? Thank you

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    liangshiwei created
    Fullstack Developer

    Hi,

    You can try :

    .AddMicrosoftAccount(MicrosoftAccountDefaults.AuthenticationScheme, options =>
    {
        //Personal Microsoft accounts as an example.
        options.AuthorizationEndpoint = "https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize";
        options.TokenEndpoint = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token";
        options.Events.OnCreatingTicket = ticketContext =>
        {
            ticketContext.Identity.AddClaim(new Claim("urn:microsoftaccount:access_token", ticketContext.AccessToken));
            return  Task.CompletedTask;
        };
        
    })
    

    Azure access token is added to the claim

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    in4tek.abp created

    Thank you so much Now, I would to have the token in Controller or Service, but when I look into the "CurrentUser", after Microsoft Login to retireve Claims, it's Empty. What is the best practice to do this? The Token is necessary to call PowerBI Dashboard, thank you.

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    liangshiwei created
    Fullstack Developer

    You can set the SaveTokens to true:

    .AddMicrosoftAccount(MicrosoftAccountDefaults.AuthenticationScheme, options =>
    {
        //Personal Microsoft accounts as an example.
        options.AuthorizationEndpoint = "https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize";
        options.TokenEndpoint = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token";
        
        options.SaveTokens = true;    
    
        options.Events.OnCreatingTicket = ticketContext =>
        {
            ticketContext.Identity.AddClaim(new Claim("urn:microsoftaccount:access_token", ticketContext.AccessToken));
            return  Task.CompletedTask;
        };
        
    })
    
    HttpContext.GetTokenAsync(scheme: MicrosoftAccountDefaults.AuthenticationScheme,"access_token");
    
    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    in4tek.abp created

    Thank you liangshiwei. Last question... is there a link where it is explain embedding PowerBI in angular abp application? With API calls, of course. tnx

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    liangshiwei created
    Fullstack Developer

    Hi,

    I think this is not related to ABP, I'm not a PowerBI expert.

    You can check those:

    • https://github.com/microsoft/powerbi-client-angular
    • https://learn.microsoft.com/en-us/javascript/api/overview/powerbi/powerbi-client-angular
    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    in4tek.abp created

    You can set the SaveTokens to true:

    .AddMicrosoftAccount(MicrosoftAccountDefaults.AuthenticationScheme, options => 
    { 
        //Personal Microsoft accounts as an example. 
        options.AuthorizationEndpoint = "https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize"; 
        options.TokenEndpoint = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token"; 
         
        options.SaveTokens = true;     
     
        options.Events.OnCreatingTicket = ticketContext => 
        { 
            ticketContext.Identity.AddClaim(new Claim("urn:microsoftaccount:access_token", ticketContext.AccessToken)); 
            return  Task.CompletedTask; 
        }; 
         
    }) 
    
    HttpContext.GetTokenAsync(scheme: MicrosoftAccountDefaults.AuthenticationScheme,"access_token"); 
    

    Hi, I added this code in my application, but whe i check into the httpContext to find the value of token, it's empty I must have its value available in the controller Thank you

    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    liangshiwei created
    Fullstack Developer

    Hi,

    Please try:

    using IdentityUser = Volo.Abp.Identity.IdentityUser;
    
    [Dependency(ServiceLifetime.Transient, ReplaceServices = true)]
    [ExposeServices(typeof(SignInManager<IdentityUser>))]
    public class MySignInManager : SignInManager<IdentityUser>
    {
        public MySignInManager(Microsoft.AspNetCore.Identity.UserManager<IdentityUser> userManager,
            IHttpContextAccessor contextAccessor,
            Microsoft.AspNetCore.Identity.IUserClaimsPrincipalFactory<IdentityUser> claimsFactory,
            IOptions<IdentityOptions> optionsAccessor, ILogger<SignInManager<IdentityUser>> logger,
            IAuthenticationSchemeProvider schemes, IUserConfirmation<IdentityUser> confirmation) : base(userManager,
            contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation)
        {
        }
    
        public override async Task SignInAsync(IdentityUser user, AuthenticationProperties authenticationProperties,
            string authenticationMethod = null)
        {
            if (authenticationMethod == "AzureOpenId") // is github external login
            {
                var githubAuthenticateResult = await Context.AuthenticateAsync(IdentityConstants.ExternalScheme);
                if (githubAuthenticateResult.Succeeded)
                {
                    if (githubAuthenticateResult.Properties != null)
                    {
                        authenticationProperties.StoreTokens(githubAuthenticateResult.Properties.GetTokens());
                    }
                }
            }
    
            await base.SignInAsync(user, authenticationProperties, authenticationMethod);
        }
    }
    
    var accessToken = await HttpContext.GetTokenAsync( OpenIdConnectParameterNames.AccessToken);
    
    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
  • User Avatar
    0
    liangshiwei created
    Fullstack Developer

    AzureAD config:

    context.Services.AddAuthentication()
    .AddOpenIdConnect("AzureOpenId", "Azure AD OpenId", options =>
    {
        options.Authority = "https://login.microsoftonline.com/" + configuration["AzureAd:TenantId"] + "/v2.0/";
        options.ClientId = configuration["AzureAd:ClientId"];
        options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
        options.CallbackPath = configuration["AzureAd:CallbackPath"];
        options.ClientSecret = configuration["AzureAd:ClientSecret"];
        options.RequireHttpsMetadata = false;
        options.SaveTokens = true;
        options.GetClaimsFromUserInfoEndpoint = true;
        options.Scope.Add("email");
        options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "sub");
      
    })
    
    Markdown supported.
    Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on September 09, 2026, 11:56
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.