我正在使用ADAL库来获取资源的访问令牌.有谁知道到期时间是什么格式?更具体地说
"exp" (Expiration time) claim.
JwtSecurityTokenclass在解析后只返回int32.所以,这不是一个好的指标.
尝试解析它TimeSpan,DateTime但值不是相隔90分钟.它几乎是一样的.
这是我从小提琴手那里得到的iat并exp声称(使用https://jwt.io/来解析令牌)
iat:1475874457
exp"1475878357
这些价值差不多.
我正在使用adal js与Azure AD进行身份验证.我有webApp和webApi.几乎我的应用程序都遵循此示例https://github.com/AzureADSamples/SinglePageApp-WebAPI-AngularJS-DotNet.
我能够登录到我的webApp,adal.js成功获取了webApi的令牌并将其注入请求中.一切都在工作到最近.然后webApi的令牌获取停止了错误:
"应用程序不支持"response_type'token'"
renewToken失败:AADSTS70005:应用程序不支持response_type'token'跟踪ID:104c18e3-eb6e-42a4-a292-c6f170f27f65相关ID:c2e65622-0c58-473a-8184-b3056fb1af58时间戳:2015-03-27 22:53 :12Z
我可以清楚地看到adal.js正在构建请求并将"response_type = token"放入查询字符串中.所以,我的假设是在Azure AD方面发生了一些变化.
我发现一篇文章将response_type = token与隐式授权流程相关联.我确认我的webApp已启用"oauth2AllowImplicitFlow".我已联系MS支持并等待解决.与此同时,我想与社区分享这一点,看看是否有人有关于这个问题的任何信息.
谢谢
我正在构建一个需要访问客户的Office 365管理活动的应用程序.我已按照此Azure Active Directory概述中概述的步骤操作,并且能够使用OAuth代码获取初始访问令牌,以及使用此令牌设置O365订阅.
但是,当我使用refresh_token提供的初始令牌获取新的访问令牌时,我收到以下错误:
{"error_description":"AADSTS65001:用户或管理员未同意使用ID为'8f72f805-dfd2-428d-8b0e-771a98d26c16'的应用程序..发送此用户和资源的交互式授权请求.\ r \nTrace ID: df229c3f-8f28-420b-9ac3-321ab1b2ad09\r \n相关ID:0e0f2bcb-4b19-458a-8556-2a6d4e51379f\r \n时间戳:2016-10-03 17:33:20Z","错误":"invalid_grant"}
由于我能够获取并使用初始访问令牌,因此我非常确定用户正在授予我的应用程序一些权限.为了使用刷新令牌获取新的访问令牌,是否需要特定权限?
编辑:
具体来说,我正在使用com.microsoft.azure::adal4j java包,AuthenticationContext类,acquireTokenByAuthorizationCode和acquireTokenByRefreshToken方法:
public class AzureProvisioner {
private final AuthenticationContext authService = new AuthenticationContext(
"https://login.windows.net/common/oauth2/token", true, Executors.newSingleThreadExecutor());
private final ClientCredential clientCredential = new ClientCredential("azureAppId", "azureAppSecret");
public static final String resource = "https://manage.office.com";
// Internal implementation of REST interface; Microsoft didn't provide a Java Library
final Office365ManagementApi managementApi;
public void acquireToken(final String authCode, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Power BI REST API,使用通过"客户端凭据"方法获取的访问令牌,但我一直403 Forbidden在接受我的请求.
我的代码遵循此AzureAD示例中演示的模式.事实上,为了隔离这个问题,我正在运行该示例代码(当然,我自己的值parameters.json):
{
expiresIn: 3599,
tokenType: 'Bearer',
expiresOn: Tue Sep 01 2015 16:56:07 GMT-0500 (CDT),
resource: '00000002-0000-0000-c000-000000000000',
accessToken: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ',
isMRRT: true,
_clientId: '[snip]',
_authority: 'https://login.windows.net/[snip]'
}
Run Code Online (Sandbox Code Playgroud)
当我在curl请求中使用该访问令牌时,如下所示,我得到一个403:
curl -vv -X GET https://api.powerbi.com/v1.0/myorg/datasets -H"Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSIsImtpZCI6Ik1uQ19WWmNBVGZNNXBPWWlKSE1iYTlnb0VLWSJ9.eyJhdWQiOiIwMDAwMDAwMi0wMDAwLTAwMDAtYzAwMC0wMDAwMDAwMDAwMDAiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC8xM2QxNzIwNC0wZGU2LTQ1NzQtOTgzYS05NjFhYjk0M2M3Y2UvIiwiaWF0IjoxNDQxMTQwNjcwLCJuYmYiOjE0NDExNDA2NzAsImV4cCI6MTQ0MTE0NDU3MCwidmVyIjoiMS4wIiwidGlkIjoiMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlIiwib2lkIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwic3ViIjoiYzM1ZWQyYTktYTYzZS00YzAwLThmYmYtY2FlYjlmZjYwMjYwIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvMTNkMTcyMDQtMGRlNi00NTc0LTk4M2EtOTYxYWI5NDNjN2NlLyIsImFwcGlkIjoiNDQ2Y2Y5OTItMDQzYS00YjgxLWJhYzQtY2RlZWYyNGFhNzFjIiwiYXBwaWRhY3IiOiIxIn0.YTGJfdW1wP09bDHwwsv3FPAmEpmQdc_kifvgY-1KjhkZWANfYtd050wfeZdNgMUeSPZyFdWnoBjnJ4xrlDtnsADwV1Grr6TXYcymPLofbY-xy0cjyvzxTmM11DJ9XN8A4tkgvK0jtR-YyIjPw5EKJSKyeEbD9U3mWsE_gu7IzKzXl8e-dfVAqRYS6WHZy6_0FaNmppPDls5s_QIPOHofFSiWVISw41Mz0fQnP2QEGyceOCvKYJtrUOCDwfVuwFS-gSLmYvEGOJfmIjftP3srda0JPirVzBeU0IFJJ1KW81kE5cfKw1KkBB04VVetRUs_7HqloYaKKiTybauhXAodRQ"
Run Code Online (Sandbox Code Playgroud)
想知道这个curl请求是否存在缺陷,我通过浏览器webtools "错误地"访问了一个访问令牌,上面的工作正常,返回200一个JSON响应列出我的数据集.
我也注意到返回代码是403(禁止),而不是401(未授权),所以我想知道授权是否正常但是Power BI端的权限是错误的.但是403当我使用任何垃圾文本作为访问令牌时,我也会得到(例如Authorization: Bearer foo),所以我放弃了这个理论.
所以.我想我有一个有效的测试,我得到了我认为是有效的访问令牌(来自该client-credentials-sample.js代码),但它仍然无法正常工作.我错过了什么?
截至2016年10月,仍然是Microsoft身份验证库(MSAL - NuGet包:Microsoft.Identity.Client)是与Xamarin(iOS/Android)和Azure AD B2C服务一起使用的正确/唯一库吗?此库(MSAL)仅作为alpha提供,并且似乎不处于主动维护或开发状态(自4月以来).
有迹象表明,Active Directory身份验证库(ADAL - NuGet包:Microsoft.IdentityModel.Clients.ActiveDirectory)旨在作为Microsoft的"一个Azure身份验证库 - 规则 - 所有人",它支持Xamarin; 它也在积极维护,并且不处于"alpha"或"beta"状态.
了解Microsoft过去曾指出Azure AD B2C开发人员使用MSAL库,是否可以使用ADAL库在Xamarin应用程序中验证Azure AD B2C用户?是否有人可以指向我的博客或示例代码,这将演示如何执行此操作?
我按照以下文档使用Azure AD App Registration创建了x509证书.
https://docs.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread
我生成了.pfx文件,设置了密码,我还在我的租户Azure AD中注册了该应用程序,然后使用keycredentials部分更新了清单.
然后,我正在创建一个接收一些参数的WEB API,包括.pfx文件.
[HttpPut]
public async Task<IHttpActionResult> PutTenant([ModelBinder(typeof(TenantModelBinder))] Tenant tenant)
{
try
{
var cert = new X509Certificate2(tenant.CertificateFile, tenant.CertificatePassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
using (var cc = new OfficeDevPnP.Core.AuthenticationManager().GetAzureADAppOnlyAuthenticatedContext(tenant.SiteCollectionTestUrl, tenant.ApplicationId, tenant.TenantDomainUrl, cert))
{
cc.Load(cc.Web, p => p.Title);
cc.ExecuteQuery();
};
}
catch (System.Exception)
{
return BadRequest("Configuration Invalid");
}
Run Code Online (Sandbox Code Playgroud)
我正在使用来自HttpRequest的bytearray来创建x509对象.
但是我收到此错误:
Message "Method not found: 'Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationResult Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireToken(System.String, Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate)'." string
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
at OfficeDevPnP.Core.AuthenticationManager.<>c__DisplayClass36_0.<GetAzureADAppOnlyAuthenticatedContext>b__0(Object sender, WebRequestEventArgs args)\r\n at Microsoft.SharePoint.Client.ClientRuntimeContext.OnExecutingWebRequest(WebRequestEventArgs args)\r\n at Microsoft.SharePoint.Client.ClientContext.GetWebRequestExecutor()\r\n at Microsoft.SharePoint.Client.ClientContext.GetFormDigestInfoPrivate()\r\n at …Run Code Online (Sandbox Code Playgroud) 使用最新版本的Safari(12)登录使用Mac OS和iOS设备的Microsoft Online似乎存在当前问题.
Safari 12上的更新如下所示:https://developer.apple.com/safari/whats-new/
由于一些新的安全和隐私更新,似乎有一个cookie问题导致登录到端点时无限重定向:http://login.microsoftonline.com
此新更新导致Apple设备用户上的Safari在登录时进入重定向无限循环.
这很可能是由于Safari不允许Microsoft cookie通过,这导致Microsoft的服务器重定向回登录页面以获取所需的cookie.但是,浏览器仍然有一些身份信息,导致用户再次自动登录,重定向到服务器.cookie仍然不随请求一起发送,导致服务器将用户发送回登录页面.从服务器和浏览器的这种重定向似乎是无限重定向背后的主要原因.
是否有任何更新,推理或解决方案来解决/解决Safari和Microsoft登录重定向问题背后的问题?
使用ADAL我有两个AuthenticationContext使用SQL中持久化的令牌缓存.
使用AcquireTokenByAuthorizationCode它在数据库中写入令牌,但在使用时AcquireTokenSilent我总是得到
无法以静默方式获取令牌.调用方法AcquireToken
以下是复制问题的详细信息:
我创建了一个Context
AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
Run Code Online (Sandbox Code Playgroud)
然后我通过授权获取授权
authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential);
Run Code Online (Sandbox Code Playgroud)
此时,它会在数据库中保存一个条目
然后,如果我打电话给我,我得到一个例外.
authContext.AcquireTokenSilent(_authority, _clientCredential, new UserIdentifier(companyId.ToString(), UserIdentifierType.UniqueId)).AccessToken;
Run Code Online (Sandbox Code Playgroud)
我也尝试过相同的结果:
authContext.AcquireTokenSilent(_authority, _clientId).AccessToken;
authContext.AcquireTokenSilent(_authority, _clientCredential, UserIdentifier.AnyUser).AccessToken;
Run Code Online (Sandbox Code Playgroud)
我AzureAdalCache在这个要点中发布我的实现.
Cache的每个条目都是这样的.
我错过了什么?
更新
根据@vibronet的评论回答,我有这个
AuthenticationContext authContext = new AuthenticationContext(_authority, new AzureAdalCache(companyId, _entries, _unitOfWork));
authContext.AcquireTokenByAuthorizationCode(authorizationCode, new Uri(redirectUri), _clientCredential, _eWSResource);
string result = authContext.AcquireTokenSilent(_eWSResource, _clientId, UserIdentifier.AnyUser).AccessToken;
Run Code Online (Sandbox Code Playgroud) 在ADAL.NET 2.x中,我们使用以下代码从Azure AD中获取令牌UserCredential并且它完美地运行:
var authContext = new AuthenticationContext(Authority);
var userCredential = new UserCredential(username, password);
var token = authContext.AcquireToken(ResourceUrl, ClientId, userCredential);
Run Code Online (Sandbox Code Playgroud)
当我今天升级ADAL.NET v3时,代码无法再编译,因为在新版本中,UserCredential没有使用用户名和密码重载构造函数.
我如何使用新版本的ADAL.NET v3解决这个问题?
我有一个Web应用程序是React,我已经为Web应用程序本身配置了Azure AD身份验证.它的100%客户端站点应用程序,没有服务器端组件.
我使用了这个组件:https: //github.com/salvoravida/react-adal
我的代码如下:adalconfig.js
import { AuthenticationContext, adalFetch, withAdalLogin } from 'react-adal';
export const adalConfig = {
tenant: 'mytenantguid',
clientId: 'myappguid',
endpoints: {
api: '14d71d65-f596-4eae-be30-27f079bf8d4b',
},
cacheLocation: 'localStorage',
};
export const authContext = new AuthenticationContext(adalConfig);
export const adalApiFetch = (fetch, url, options) =>
adalFetch(authContext, adalConfig.endpoints.api, fetch, url, options);
export const withAdalLoginApi = withAdalLogin(authContext, adalConfig.endpoints.api);
Run Code Online (Sandbox Code Playgroud)
index.js
import React from 'react';
import ReactDOM from 'react-dom';
import DashApp from './dashApp';
import registerServiceWorker from './registerServiceWorker';
import 'antd/dist/antd.css';
import { runWithAdal } …Run Code Online (Sandbox Code Playgroud)