2016-04-11 10 views
0

クライアントの資格情報でoffice365 apiを使用するアクセストークンを取得しようとしています。私は、このガイドを使用しています:Office 365 Rest API - Daemon week authenticationRSA SHA-256ハッシュでJWTに署名する方法

私は郵便配達を使用して、私のリクエストを送信しています(下記参照) Postman Picture

を私は要求「AADSTS70002を送信するときしかし、郵便配達は私に、このエラーを与える:。エラーの検証の資格情報をAADSTS50012:クライアントのアサーションに無効なシグネチャが含まれています。 "

私の要求では、client_assertionパラメータに使用されているJWTに正しく署名していません。このスタックオーバーフローの質問Could not retrieve app only tokens for office 365を参照すると、RSA SHA-256ハッシュを使用して署名する必要があることがわかりました。しかし、私はJWTをオンラインで見つけたリソースで動作させることができませんでしたが、これは同じエラーが戻ってくるでしょう。 RSA SHA-256ハッシュを使用してJWTに署名するために使用できるオンラインジェネレータはありますか?または、C#でこのような歌を行うコード例は何ですか?前もって感謝します。

答えて

0

まず、あなたがトークンに署名する方法についてのブログBuilding Daemon or Service Apps with Office 365 Mail, Calendar, and Contacts APIs (OAuth2 client credential flow)

を参照して、アズールADマニフェストに証明書を設定する必要があり、ここにあなたの参照のためのC#サンプルは、

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); 

することができますまた、GitHubの

https://github.com/dream-365/OfficeDev-Samples/blob/master/samples/Office365DevQuickStart/JWT-Tokenにそれが働いた

+0

おかげでプロジェクトを見つけて下さい! –