หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ฟังก์ชันที่ติดตั้งจะเรียกใช้ทรัพยากร Azure และ Fabric ภายนอกเป็นตัวตนของแอปโดยใช้การตรวจสอบสิทธิ์แอปพลิเคชัน ประกาศว่ากลุ่มเป้าหมายเป็นฟังก์ชันที่ต้องการ และใช้โทเค็นที่แพลตฟอร์มจัดให้และครอบคลุมทรัพยากรผ่าน ctx.Tokens.
การลงชื่อเข้าใช้ CLI สําหรับนักพัฒนาและการค้นหาจุดสิ้นสุดในขณะสร้างแยกจากการเข้าถึงขณะใช้งาน ตรวจสอบสิทธิ์ของตัวตนแอปที่ติดตั้ง แม้ว่านักพัฒนาจะสามารถเข้าถึงทรัพยากรนั้นได้
Prerequisites
- แอป Fabric ที่ฟังก์ชันถูกเปิดใช้งานแล้ว สําหรับคําแนะนําการตั้งค่า ดูที่ การใช้ฟังก์ชันในแอป Fabric
-
services.functions.auth.typeตั้งค่าเป็นapplicationinrayfin/rayfin.ymlสําหรับรายละเอียดการกําหนดค่า โปรดดูที่ การตรวจสอบสิทธิ์แอปพลิเคชัน - ตัวตนของแอปให้สิทธิ์เข้าถึงทรัพยากรภายนอกแต่ละตัวที่โค้ดฟังก์ชันเรียกใช้
ประกาศการเชื่อมต่อภายนอก
ประกาศกลุ่มเป้าหมายใน RayfinContext คําอธิบายประกอบ แล้วอ่านโทเค็นที่มีขอบเขตจาก ctx.Tokens:
import {
UserDataFunctions,
AudienceType,
type RayfinContext,
} from '@microsoft/fabric-user-data-functions';
const udf = new UserDataFunctions();
udf.func(
'accessStorage',
async (
ctx: RayfinContext<AppSchema, AudienceType.Storage>,
): Promise<string> => {
const token: string = ctx.Tokens.Storage;
// Use the token with the resource SDK or REST API.
return 'ok';
},
[],
);
คําอธิบายประกอบคือคําประกาศ การระบุกลุ่มเป้าหมายใน RayfinContext<Schema, Audiences> จะลงทะเบียนการผูกพันการเชื่อมต่อ เก็บอาร์กิวเมนต์ที่สามของ udf.func() as []ไว้
ctx.Tokens ถูกจํากัดให้อยู่ในกลุ่มเป้าหมายที่คุณประกาศ กลุ่มเป้าหมายที่ไม่ได้ประกาศทําให้เกิดข้อผิดพลาดในการคอมไพล์:
async (
ctx: RayfinContext<AppSchema, AudienceType.Sql | AudienceType.Storage>,
) => {
const sqlToken: string = ctx.Tokens.Sql;
const storageToken: string = ctx.Tokens.Storage;
};
ค่าของโทเค็นมี string ประเภท การประกาศกลุ่มเป้าหมายจะบันทึกการผูกพัน แต่ไม่ได้รับประกันว่าจะมีโทเค็นพร้อมใช้งานหรือเข้าถึงทรัพยากร หากโฮสต์ไม่ให้โทเค็นที่ประกาศไว้ การอ่านคุณสมบัติของ ctx.Tokens โฮสต์จะทําให้เกิดข้อผิดพลาด
ระบุอาร์กิวเมนต์สคีมา
RayfinContext เริ่มจากสคีมาแอปของคุณก่อน ใช้สคีมาเดียวกันที่คุณส่งข้อมูลไป RayfinClient<AppSchema> เพื่อให้ไคลเอนต์ข้อมูลยังคงพิมพ์อยู่เมื่อคุณเพิ่มกลุ่มเป้าหมาย:
async (ctx: RayfinContext<AppSchema, AudienceType.Sql>) => {
const data = ctx.getDataClient();
const token = ctx.Tokens.Sql;
};
หากฟังก์ชันต้องการ audience แต่ไม่เข้าถึงฐานข้อมูล Rayfin ให้ส่งสคีมาเริ่มต้นอย่างชัดเจน:
async (ctx: RayfinContext<Record<string, any>, AudienceType.Fabric>) => {
const token = ctx.Tokens.Fabric;
};
กลุ่มผู้ชมที่รองรับ
AudienceType เป็นแหล่งข้อมูลความจริงสําหรับกลุ่มเป้าหมายที่ได้รับการสนับสนุน:
| แหล่งข้อมูลภายนอก | AudienceType |
|---|---|
| Fabric lakehouse, คลังสินค้า, ฐานข้อมูล SQL ใน Fabric, ฐานข้อมูลแบบมิเรอร์ หรือ Azure SQL Database | Sql |
| Fabric OneLake files, Azure Blob Storage, Azure Table storage หรือ Azure Queue Storage | Storage |
| Microsoft Fabric REST API | Fabric |
| Azure AI Foundry | AzureAI |
| Azure DevOps | ADO |
โมเดลเชิงความหมายของ Power BI ไม่มีให้ใช้ผ่าน ctx.Tokens. ใช้ตัว fabric-semanticmodel เชื่อมต่อแทน สําหรับคําแนะนําเกี่ยวกับตัวเชื่อมต่อ ดูที่ ข้อมูลเชื่อมต่อกับ Fabric
เข้าใจข้อมูลเมตาของการปรับใช้
อาร์กิวเมนต์ชนิดข้อมูลจะถูกลบก่อนที่ฟังก์ชันจะทํางาน ในระหว่าง npx rayfin up, คอมไพเลอร์ TypeScript จะแก้ไขกลุ่มเป้าหมายที่ประกาศและเขียนยูเนียนลงในเมตาดาต้าสําหรับการติดตั้ง worker ฟังก์ชันจะใช้ข้อมูลเมตานั้นเพื่อผูกการเชื่อมต่อ
ชื่อประเภทจะทํางานเมื่อโปรเจกต์ Functions มี tsconfig.json:
type SqlAccess = AudienceType.Sql;
async (ctx: RayfinContext<AppSchema, SqlAccess>) => {
const token = ctx.Tokens.Sql;
};
ชอบค่าที่ตรงตัว AudienceType.X มากกว่า ถ้าโปรเจกต์ Functions ไม่มี tsconfig.json, CLI จะใช้คอมไพเลอร์ไม่ได้และจะอ่านไวยากรณ์คําอธิบายแทน ในโหมดนั้น นามแฝงจะเปลี่ยนเป็นชื่อของตัวเองแทนที่จะเป็นกลุ่มเป้าหมายที่มันเป็นตัวแทน ให้ถือว่าคําเตือน CLI เกี่ยวกับ fallback นี้เป็นข้อผิดพลาดที่ต้องแก้ไข
พารามิเตอร์บริบทต้องมีคําอธิบายประกอบอย่างชัดเจนRayfinContext<...> การสร้างประเภทจะระบุพารามิเตอร์บริบทผ่านคําอธิบายประกอบนี้ หากไม่มีพารามิเตอร์นี้ พารามิเตอร์จะถูกปฏิบัติเป็นพารามิเตอร์ request-body
มอบสิทธิ์ทรัพยากร
สําหรับแอป Fabric ปัจจุบัน ตัวตนของแอปคือเจ้าของรายการแอป Fabric นั้น การเชื่อมต่อภายนอกจะใช้ตัวตนนี้และสิทธิ์ของมัน ไม่ใช่ตัวตนหรือสิทธิ์ของผู้ใช้แอปที่เรียกใช้ฟังก์ชัน
ให้สิทธิ์การเข้าถึงที่จําเป็นสําหรับทุกทรัพยากรและ API ที่โค้ดฟังก์ชันเรียกใช้ การประกาศกลุ่มเป้าหมายและการปรับใช้ฟังก์ชันจะลงทะเบียนการผูกโทเค็นแต่ไม่ให้สิทธิ์กับทรัพยากรเป้าหมาย
เก็บโทเค็นทรัพยากรไว้บนเซิร์ฟเวอร์ อย่าส่งคืนผลลัพธ์เป็นฟังก์ชันหรือส่งไปยังส่วนหน้า
การลงชื่อเข้าใช้แอปและการอนุญาตให้เรียกใช้ฟังก์ชันนั้นแยกจากการเข้าถึงทรัพยากรภายนอกของตัวตนแอป
ตัวตนฐานข้อมูล Rayfin
ฐานข้อมูล Rayfin ใช้เส้นทางการตรวจสอบสิทธิ์แยกต่างหาก
ctx.getDataClient() ใช้โทเค็น Rayfin ของการเรียกใช้งาน ดังนั้นการเข้าถึงฐานข้อมูลจะรักษาตัวตนและสิทธิ์ฐานข้อมูลของผู้โทรไว้ การตรวจสอบสิทธิ์แอปพลิเคชันสําหรับฟังก์ชันจะไม่สลับการเข้าถึงฐานข้อมูล Rayfin ไปยังตัวตนของแอปพลิเคชัน
ใช้โทเค็นกับ Azure SDK
ไคลเอนต์ Azure SDK หลายรายคาดหวัง TokenCredential token string แทนที่จะเป็น raw token string กําหนดอะแดปเตอร์ที่คืนโทเค็นจากบริบท:
import type { TokenCredential, AccessToken } from '@azure/identity';
class ContextTokenCredential implements TokenCredential {
constructor(private readonly token: string) {}
async getToken(): Promise<AccessToken> {
return {
token: this.token,
expiresOnTimestamp: Date.now() + 3600_000,
};
}
}
ส่ง new ContextTokenCredential(ctx.Tokens.Storage) หรือโทเค็นที่ประกาศไว้ที่เหมาะสมให้กับไคลเอนต์ SDK ที่ต้องการข้อมูลรับรอง ติดตั้งแพ็กเกจ resource SDK ใน rayfin/functions/package.json, ไม่ใช่ใน project root
พัฒนาในพื้นที่
npx rayfin devและnpx rayfin dev functions applyเริ่มต้นโฮสต์ ฟังก์ชัน Azure Core Tools ในเครื่อง ในโฮสต์ Functions ภายในเครื่อง โทเค็นทรัพยากรภายนอกจะใช้ตัวตนและสิทธิ์ของบัญชีที่ตัวสร้างแอปใช้ในการลงชื่อเข้าใช้
ฟังก์ชันที่ติดตั้งแล้วจะใช้ตัวตนของแอปแทน ดังนั้น การโทรภายในเครื่องที่สําเร็จจึงไม่พิสูจน์ว่าตัวตนแอปที่ติดตั้งมีสิทธิ์เข้าถึงทรัพยากร ทดสอบฟังก์ชันที่ติดตั้งหลังจากให้สิทธิ์ตามที่กําหนดแก่ตัวตนแอปแล้ว