2016-04-11 17 views
0

İstemci kimlik bilgileri aracılığıyla office365 API kullanımı için bir erişim belirteci almaya çalışıyorum. Ben isteği "AADSTS70002 gönderdiğinizde Postman PictureBir RSA SHA-256 hash ile JWT nasıl imzalanır

Ancak postacı bana bu hata veriyor (aşağıya bakınız) Office 365 Rest API - Daemon week authentication

Ben postacı kullanarak isteğimi yolluyorum: Ben bu kılavuzu kullanıyorum. Doğrulama hatası kimlik AADSTS50012: İstemci iddiası, geçersiz bir imza "

içeriyor. Bu nedenle, istekte bulunan client_assertion parametresi için kullanılan JWT'yi doğru şekilde imzalamam kesin olarak eminim. Bu yığın taşması sorusuna atıfta bulunarak Could not retrieve app only tokens for office 365 Bir RSA SHA-256 hash kullanarak imzalamam gerektiğini buldum. Bununla birlikte, JWT'm, çevrimiçi olarak bulduğum kaynakların herhangi biriyle nasıl çalışacaklarını hala alamıyordum, yine de aynı hatayla geri dönecekti. Bir RSA SHA-256 hash kullanarak JWT'imi imzalamak için kullanabileceğim bir çevrimiçi jeneratör var mı? Ya da C# de bu şekilde şarkı söyleme yapan herhangi bir kod örneği? Şimdiden teşekkürler.

cevap

0

Öncelikle, yapabilirsiniz

var x509Certificate2 = new X509Certificate2(@"{FILE PATH}\office_365_app.pfx", "PASS_WORD"); 

    X509SigningCredentials signingCredentials = new X509SigningCredentials(x509Certificate2, SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest); 

    JwtSecurityTokenHandler tokenHandler = new JwtSecurityTokenHandler(); 

    var originalIssuer = "{YOUR CLIENT ID}"; 

    var issuer = originalIssuer; 

    DateTime utcNow = DateTime.UtcNow; 

    DateTime expired = utcNow + TimeSpan.FromHours(1); 

    var claims = new List<Claim> { 
     new Claim("aud", "https://login.microsoftonline.com/{YOUR_TENENT_ID}/oauth2/token", ClaimValueTypes.String, issuer, originalIssuer), 
     new Claim("exp", "1460534173", ClaimValueTypes.DateTime, issuer, originalIssuer), 
     new Claim("jti", "{SOME GUID YOU ASSIGN}", ClaimValueTypes.String, issuer, originalIssuer), 
     new Claim("nbf", "1460533573", ClaimValueTypes.String, issuer, originalIssuer), 
     new Claim("sub", "{YOUR CLIENT ID}", ClaimValueTypes.String, issuer, originalIssuer) 
    }; 

    ClaimsIdentity subject = new ClaimsIdentity(claims: claims); 

    JwtSecurityToken jwtToken = tokenHandler.CreateToken(
     issuer: issuer, 
     signingCredentials: signingCredentials, 
     subject: subject) as JwtSecurityToken; 

    jwtToken.Header.Remove("typ"); 

    var token = tokenHandler.WriteToken(jwtToken); 

, blog'u burada, bir belirteç imzalamak referans için C# örnek olduğunu nasıl Hakkında Building Daemon or Service Apps with Office 365 Mail, Calendar, and Contacts APIs (OAuth2 client credential flow)

bkz Azure AD tezahür üzerinde sertifikaları kurmak gerekiyor Ayrıca GitHub'dan

https://github.com/dream-365/OfficeDev-Samples/blob/master/samples/Office365DevQuickStart/JWT-Token üzerinde işe yaradı

+0

Teşekkür projeyi bulun! –

İlgili konular