标签: adal

使用ADAL库的Azure Active Directory注销

我使用Azure Azure Active Directory来保护我的Web API,并在Azure管理门户中创建本机应用程序.这个本机应用程序基本上是一个MVC Web应用程序,我使用ADAL库获取令牌并使用该令牌调用api.我用来获取令牌的代码如下所示:

AuthenticationContext ac = new AuthenticationContext(authority);
AuthenticationResult ar = ac.AcquireToken(resourceID, clientID, redirectURI);
string accessToken = ar.AccessToken;
Run Code Online (Sandbox Code Playgroud)

现在我需要注销并切换到另一个用户,但不知何故系统会记住用户凭据.我在身份验证上下文中清除令牌缓存并发布logout api请求,如下所示,其中***是我的租户ID.

//Log out after api call
ac.TokenCache.Clear();

string requestUrl = "https://login.windows.net/***/oauth2/logout";

var client = new HttpClient();
var request = new HttpRequestMessage(HttpMethod.Get, requestUrl);
var response = await client.SendAsync(request);
Run Code Online (Sandbox Code Playgroud)

api调用成功但注销不起作用.如何注销并切换到其他用户?

azure azure-active-directory adal

7
推荐指数
1
解决办法
1万
查看次数

通过资源管理器(或代码)部署Azure Active Directory B2C

我们公司正在考虑使用AAD B2C作为我们SaaS用户帐户的后备存储.我们的计划是使用Resource Manager模板为每个客户端部署Azure基础结构(Web,存储,sql等).如果这样做,AAD B2C将成为其中的一部分,但截至目前,似乎没有办法在资源管理器模板中包含AAD B2C.

我对B2C产品意图的看法是,它可以替代应用程序的auth和用户存储组件,因此应该被视为基础架构.现在,新天蓝色门户网站中AAD和资源组之间的层次结构并未反映出 - 资源组(及其资源)显示在AAD帐户中的标识下.但那是为什么呢?AAD是资源组的父级吗?我试图理解两者如何结合在一起.

如果AAD B2C在离开预览时真正用于此目的,则需要支持自动化.快速搜索后,我甚至找不到代码示例来配置新目录,更不用说使用资源管理器模板了.

我看这一切都错了吗?

azure azure-active-directory adal azure-resource-manager

7
推荐指数
1
解决办法
1365
查看次数

将Adal JS与Office 365一起使用 - 在首次加载时使用多个Ajax调用

我正在使用Adal JS用O365验证我的Html应用程序.该应用程序已在Azure AD中注册.在使用devloper工具时,我注意到断点 $.ajax({多次出现(从Azure AD回调之后).这导致**的多次执行.done.我在认证中遗漏了什么吗?

$(document).ready(function () {

  (function () {
    "use strict";

    window.config = {
      subscriptionId: 'ID',
      clientId: 'ID',
      endpoints: {
        mailApi: 'https://outlook.office365.com'
      },
      cacheLocation: 'localStorage'
    };

    var authContext = new AuthenticationContext(config);

    var isCallback = authContext.isCallback(window.location.hash);

    authContext.handleWindowCallback();

    if (isCallback && !authContext.getLoginError()) {
      window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST);
    }

    var user = authContext.getCachedUser();
    if (!user) {
      authContext.login();
    }
    else {

      authContext.acquireToken(config.endpoints.mailApi, function (error, token) {
        if (error || !token) {
          console.log('ADAL error occurred: ' + error);
          return; …
Run Code Online (Sandbox Code Playgroud)

javascript ajax oauth office365 adal

7
推荐指数
0
解决办法
499
查看次数

在C#REST服务中验证ADAL JWT令牌

我有一个Web应用程序,它使用ADAL库通过Azure Active Directory进行身份验证.

此Web应用程序通过将ADAL标记字符串作为参数传递来调用C#REST服务.在我的REST服务中,我想验证此令牌.如果令牌有效,则服务将执行该操作.

我搜索了很多但是找不到在我的休息服务中验证JWT令牌的方法.你能帮帮我吗?

c# validation jwt azure-active-directory adal

7
推荐指数
1
解决办法
3013
查看次数

如何使用IdentityModel Extensions for .NET 5生成JWT令牌

我正在使用 IdentityModel Extensions for .NET版本4来生成具有对称密钥SHA256的 JWT令牌,如下所示,它完美地工作:

var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(claims),

    TokenIssuerName = Issuer,
    AppliesToAddress = Audience,

    Lifetime = new Lifetime(now, expirationTime),

    SigningCredentials = new SigningCredentials(
        new InMemorySymmetricSecurityKey(symmetricKey),
        "http://www.w3.org/2001/04/xmldsig-more#hmac-sha256",
        "http://www.w3.org/2001/04/xmlenc#sha256"),
};

var securityToken = tokenHandler.CreateToken(tokenDescriptor);
var token = tokenHandler.WriteToken(securitytoken);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试升级到IdentityModel Extensions for .NET 5时,如下代码:

var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(claims),

    Issuer = Issuer,
    Audience = Audience,

    Expires = expirationTime,
    SigningCredentials = new SigningCredentials(
        new SymmetricSecurityKey(symmetricKey), "SHA256")
}; …
Run Code Online (Sandbox Code Playgroud)

c# azure jwt azure-active-directory adal

7
推荐指数
2
解决办法
2万
查看次数

OAuth 2.0授权代码授权无保密

所以我一直在寻找使用Microsofts cordova-plugin-ms-adal插件(使用本机库)针对使用Azure AD的自定义API 为Cordova移动应用程序设置OAuth 2.0 .这一切都运作良好,但我对秘密的使用(或更具体地说,它的缺席)有点困惑.

在网上的许多文章中,他们声明当使用授权代码授予和请求令牌时,您包括秘密.并且当您可以安全地存储例如服务器上的秘密时,此授权类型是理想的.

但是,该插件不要求在应用程序中指定秘密(并且正确地如此),但它仍然使用授权代码授权进行身份验证.我也可以手动打电话

https://login.windows.net/common/oauth2/authorize?resource=http://***.onmicrosoft.com/***API&client_id=***&response_type=code&redirect_uri=http://***.onmicrosoft.com/***App
Run Code Online (Sandbox Code Playgroud)

在我的浏览器中,登录,获取代码,然后POST到https://login.windows.net/common/oauth2/token with

grant_type: authorization_code
client_id: ***
code: ***
redirect_uri: http://***.onmicrosoft.com/***App
resource: http://***.onmicrosoft.com/***API
Run Code Online (Sandbox Code Playgroud)

它有效,所以我得到一个有效的JWT,而不必发送秘密.

为什么!?这不太安全吗?(我也注意到OAuth 2.0规范4.1.3没有说明授权类型授权代码需要秘密!?)

在没有秘密/基本身份验证标头的情况下使用授权类型的authorization_code会有什么影响?

oauth azure adal

7
推荐指数
2
解决办法
2634
查看次数

尝试使用ADAL.js AuthenticationContext获取访问令牌时,access_token与id_token相同吗?

我正在使用Azure AD对我的单页应用程序(Angular4)进行身份验证,并使用Adal.js进行相同的操作。在登录页面上,我单击重定向到Microsoft AAD的按钮,并在成功登录后将其重定向回应用程序主页,并id_token从JWT 接收用户信息。

我需要access_token进行后端API访问,这是我试图通过ADAL AuthenticationContextgetCachedToken()方法获取的,并将clientId作为参数发送:

this.context.getCachedToken(this.configService.AdalConfig.clientId)
Run Code Online (Sandbox Code Playgroud)

但是此方法返回的令牌与会话存储的令牌相同id_token (adal.idtoken)。它基本上是通过使用级联键在会话存储中创建一个新项目,其值与id_token

adal.access_token.key + clientId = id_token
Run Code Online (Sandbox Code Playgroud)

例如:adal.access_token.key239f6fc7-64d2-3t04-8gfd-501efc25adkd = <id-token-value>

我也尝试access_tokenAuthenticationContext.acquireToken()方法来获取,但是它也给了id_token回头。

我要去哪里错了?

编辑:发布代码。 我正在调用该函数login(),并在成功登录后,尝试通过中的get accessToken()属性访问器获取主页中的访问令牌adal.config.ts

config.service.ts

import { Injectable } from '@angular/core';

@Injectable()
export class ConfigService {
  constructor() {}
  public get AdalConfig(): any {
    return {
      tenant: 'common',
      clientId: <application-id>,
      redirectUri: window.location.origin + '/',
      postLogoutRedirectUri: window.location.origin + '/'
    }; …
Run Code Online (Sandbox Code Playgroud)

javascript azure-active-directory adal adal.js angular

7
推荐指数
1
解决办法
2271
查看次数

错误:未找到租户授权.如果租户没有有效订阅,则可能会发生这种情况

我已经编写了以下代码来获取CRM的令牌.

class Program
{
    private const string username = "richa@azuretraining112.onmicrosoft.com";
    private const string password = "Pa$$w0rd";
    private const string serviceURL = "https://azuretraining112.crm8.dynamics.com";
    private const string applicationID = "89a70b76-3a71-481f-8755-a7aa97c59c35";
    private const string redirectURL = "https://localhost1";
    private const string authorityURI = "https://login.microsoftonline.com/1d54ea41-cd25-488f-812c-c078e6114065/oauth2/authorize";
    private static AuthenticationResult authResult = null;


    private static void Main(string[] args)
    {
        var credentials = new UserPasswordCredential(username, password);
        var context = new AuthenticationContext(authorityURI);
        authResult = context.AcquireTokenAsync(serviceURL, applicationID, credentials).Result;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在运行代码时,我在尝试使用AcquireTokenAsync获取令牌时收到以下错误.

大段引用

我已使用应用程序ID添加了应用程序用户: 在此输入图像描述

我不知道我错过了什么.请帮忙!

我尝试了租户未授权的解决方案,但没有任何效果.

谢谢!

c# dynamics-crm azure adal dynamics-365

7
推荐指数
1
解决办法
929
查看次数

AzureAD JWT令牌受众声明前缀使JWT令牌无效

我正在使用'adal-node'npm包来验证AzureAD.这一切都很好,我收到了一个令牌.

但是,在检查JWT令牌中的'aud'声明时,我看到观众GUID的前缀为'spn:'.我认为当我尝试在现有的Web API上使用JWT令牌时,这会导致我出现问题.当我使用相同的AzureAD通过WebApp进行身份验证时,'aud'声明不带有'spn:'前缀,我可以在WebAPI上调用端点.

任何人都可以对此有所了解吗?在经历了大量的工作之后,这是最后一个障碍.

更新:

使用npm包'azure-ad-jwt'在我收到它时立即用AzureAD验证JWT令牌给我一个错误,我怀疑是这个问题 - 'JWT观众无效'.期待'aud'声称不具有'spn:'前缀.这个spn前缀来自哪里?

这是我的app.js

var adal = require('adal-node');

var activeDirectoryEndpointUrl = 'https://login.microsoftonline.com/';

var options = {
    domain: '<AzureAD GUID>',
    activeDirectoryResourceId: '<AzureAD App Client ID 1>',
    clientId: '<AzureAD App Client ID 2>'
};

var tokenCache = new adal.MemoryCache();
var authorityUrl = activeDirectoryEndpointUrl + options.domain;
var context = new adal.AuthenticationContext(authorityUrl, true, tokenCache);

context.acquireUserCode(options.activeDirectoryResourceId, options.clientId, 'en-us', function (err, userCodeResponse) {
    if (err) {
        console.error(err);
        return;
    }

    console.log('Use a web browser to open the page ' + userCodeResponse.verificationUrl + …
Run Code Online (Sandbox Code Playgroud)

rest node.js jwt azure-active-directory adal

6
推荐指数
1
解决办法
1040
查看次数

使用访问令牌与 SQL Azure DB 的实体框架连接

我们有连接到 SQL Azure DB 的 Web 应用程序。我已使用应用程序 ID 和证书配置了我的应用程序。我们希望利用访问令牌方法连接到 SQL Server,根据下面的链接,通过令牌方法连接到 SQL Server 并不是一种可靠的方法。任何推荐的连接方式,而不是用户 ID 和密码。

使用 Azure Active Directory 从 Azure 网站连接到 Azure SQL?

谁能告诉我他们是否使用实体框架实现了基于 SQL Azure DB AAD 令牌的身份验证,并且这是正确的连接方式。

entity-framework azure-active-directory adal

6
推荐指数
1
解决办法
8708
查看次数